如何在 QML 中创建新窗口?
有没有一种方法可以创建一个全新的窗口实例,作为qmlapplication中主QML窗口的子窗口? // ChildWindow.qml Rectangle { id: childWindow width: 100 height: 100 // stuff } // main.qml Rectangle { id: window width: 1000 height: 600 MouseArea { anchors.fill: parent onClicked: createAWindow(childWindow); } } 我试图避免写一个Q_OBJECT类,只是为了在新的QmlApplicationViewer中安装新窗口. 解决方案 无法仅使用内置QML功能创建顶级窗口. 但是,在QT实验室上有一个项目,称为,其中包含a 窗口组件,它允许您创建新的顶级
6 2023-12-04
编程技术问答社区
q_Object问题在Visual C ++中
我从客户那里收到了一个基于C ++ QT的项目.我已经安装了QT库,然后编辑了该项目.该项目是没有任何问题的. 现在,我需要在现有项目中加入一个新的GUI接口.我在QT设计师中创建了一个GUI,然后保存在VC ++项目的源目录中.然后,我为新GUI编写了.h和.cpp文件,可以调用此接口.现在,当我在.h文件中包含q_object时,我需要包括信号和插槽.我有汇编错误. 这些是错误,请帮助我解决此问题: unresolved external symbol "public: virtual struct QMetaObject const * __thiscall BetaLineServer::metaObject(void)const " (?metaObject) unresolved external symbol "public: virtual void * __thiscall BetaLineServer::qt_metacast(char const
12 2023-11-20
编程技术问答社区
在 Qt 中检查 QObject 派生类类型的正确方法
可以说我有两个类: class A : public QObject {}; class B : public QObject {}; 然后我去 QObject *a = new A(); QObject *b = new B(); 现在,如何确保" A"是A类的实例,而" B"是B类的实例? 目前我会做这样的事情: if (a->inherits(A::staticMetaObject.className())) { ... } else if (a->inherits(A::staticMetaObject.className())) { ... 有更好的方法吗? 解决方案 您可以在Qobject派生的类上使用qobject_cast(instance)并检查返回值.如果不能将instance施加到MyClass*,则返回值将为null.
6 2023-10-30
编程技术问答社区
是否有可能将模板衍生的C++类与Qt'的Q_OBJECT混合在一起?
在我的应用程序中,我有以下类层次结构: class Word { ... } template class Dictionary { ... }; class WordDictionary : public Dictionary { Q_OBJECT ... } 单词词典班级解析了一条词典,该字典需要很长时间.我正在从单独的线程中运行解析函数,我希望它能够不时向GUI线程发出信号,以根据正在解析的当前行号提供进度更新.这就是为什么我希望它成为q_object.我试图使基类词典成为q_object,但收到了一条消息,即不支持q_Object模板.当我删除宏时,仅将文字作为q_object时,我会收到一系列通用形式的错误消息: .\ generatedFiles \ repares \ moc_dictionary.cpp(44):错误c2039:'staticmetaObject':不是'dicti
18 2023-10-15
编程技术问答社区
维护一个由按下的按钮创建的QObject
我正在制作一个应用程序,在某些时候,用户将通过/调查创建某种形式.创建时,用户将通过按下按钮和新对象选择各种问题类型等. 创建一个新部分,例如: void CreateSurvey::question_section() { QLabel *sectionTitle = new QLabel(); sectionTitle->setText("New Section"); layout->addWidget(sectionTitle); QLabel *titleLabel = new QLabel("Title"); QLineEdit *titleEdit = new QLineEdit("New Section"); QHBoxLayout *hLayout = new QHBoxLayout; hLayout->addWidget(titleLabel); hLayout->addWidget(titleEdit); layout->addLa
0 2023-10-02
编程技术问答社区
QObject到底有多重?
我最近在典型的用法方案中发布了一个有关Qobject开销的问题,但不幸的是,这个问题被关闭,这是另一个没有从技术上回答问题的问题的重复. 更糟糕的是,仓促的"撒玛利亚人"礼貌地赶紧关闭我的问题,打断了我在进行一些测试后刚完成打字的答案.由于我无法在最初的问题中发布我的发现,因此我将在此处发布,以便其他可能需要该信息的人可以使用. 解决方案 很多人暗示了Qobject很重,但毫无明确地说它的重量很重.因此,我进行了一些测量,不是很准确,所有值都是近似的. 未使用的Qobject〜160字节 w/o参数的单个自动连接〜235字节 2自动连接w/o参数〜315字节 3个自动连接,1个带3个参数〜400字节 2个自动连接,1个排队3个参数〜432字节 这些数字应考虑到我正在使用64位QT构建. 因此,总而言之,Qobject的开销确实非常重要.没有什么可以打喷嚏或过度使用的.
6 2023-09-04
编程技术问答社区
在 QObject 之间跨线程连接信号/插槽
我想知道什么是在MainWindow的Contructor中创建的两个QoBject之间连接信号/插槽的最佳实践,但稍后移动到不同的线程...默认连接似乎不起作用,然后当我与选项Qt::Directconnection连接时事情开始工作...但是有时信号/插槽失败了...以下是我的代码模式.请让我知道我是否需要更改我的班级设计... mainwindow.cpp MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), { myObjectA = new ObjectA; myObjectB = new ObjectB; connect( myObjectA,SIGNAL(signalA()),myObjectB,SLOT(slotB()) ); myObjectA.initiateProcess(); myObjectB.initiateProcess(); }
12 2023-09-03
编程技术问答社区
基于QObject的类对自己有一个排队的连接
我正在研究我正在处理的一些源代码.我发现了有人编码的奇特声明.源代码是带有QML GUI的GUI应用程序,并使用QT 4.7.x. 下面的摘要属于核心应用程序逻辑. // connect signal-slots for decoupling QObject::connect (this, SIGNAL(setCurrentTaskSignal(int)), this, SLOT(SetCurrentTaskSlot(int)), Qt::QueuedConnection); 奇怪的是,对象通过排队的连接连接到自身,这实际上意味着对象可以同时在不同的线程中"活"? 乍一看,这对我没有任何意义.谁能想到为什么这种连接是合理或需要的原因?这甚至可以工作吗? 解决方案 它将毫无问题地工作.在调用setCurrentTaskSlot之前,可能需要进行一些事件循环处理? 请注意,QueuedConnection并不意味着不同的线程中的某些内容. Que
8 2023-09-03
编程技术问答社区
暂时屏蔽两个 QObject 之间的信号
我想在不修改其他信号/插槽行为的情况下,一般且暂时阻止两个QObjects之间的信号,而不知道其上下文. 类似于 qobject "> qobject :: blocksignals(bool) ,但仅在两个QObjects之间起作用. 也就是说,实现以下SignalBlocker::blockSignals(bool)函数: class SignalBlocker { public: SignalBlocker(QObject *sender, QObject *receiver) : mSender(sender), mReceiver(receiver) {} void blockSignals(bool block); private: QObject *mSender, *mReceiver; } 可以通过断开和重新连接对象,但首先必须存储信号/插槽的列表. 内省方法似乎没有足够的功能来实现这一目标(我看了QMetaObject和Q
2 2023-09-03
编程技术问答社区
QThread finished()连接到一个QObject的deletelater。
我已经思考了很多东西,并在此处提出这个问题之前阅读了很多文章.这些文章都没有给我一个适当的答案. > http://mayaposch.wordpress.com/2011/11/11/how-to-really-truly-truly-use-qhreads-the--full-explanation/ QThread* thread = new QThread; Worker* worker = new Worker(); worker->moveToThread(thread); connect(worker, SIGNAL(error(QString)), this, SLOT(errorString(QString))); connect(thread, SIGNAL(started()), worker, SLOT(process())); connect(worker, SIGNAL(finished()), thread, SLOT(quit())
12 2023-09-03
编程技术问答社区
如何在qt connect中把qobject作为参数从信号传到槽中?
我的原始代码将QStringList从信号传递给插槽,然后返回一个Qlist. 一切都很好,但是我需要将QStringList和Qlist更改为2个不同的子分类Qobjects.从那以后,我一直收到诸如"首先需要的综合方法"之类的错误,或者它只是崩溃而没有任何错误消息. 我知道QT复制了以排队连接的所有参数,无法复制QOBject.因此,我认为我认为我会在发出信号之前创建两个qobject. 然后,我将引用到每个对象,在插槽函数中修改其中一个,然后空白返回值. 不幸的是,无论我如何编码信号和插槽功能,该应用程序仍然会崩溃. 如何编码信号/插槽功能并将它们连接到将两个qobject作为参数传递或返回qobject? ? MyQObject1 obj1("a","b","c"); MyQObject2 obj2(); emit sendSignal(&obj1, &obj2); // or MyQObject2 obj2 = emit sendSignal(&o
16 2023-09-03
编程技术问答社区
QSharedPointer和QObject::deleteLater
我有一个情况,即QSharedPointer托管对象信号表明它已经完成了其目的,并且可以尽快删除(执行后,函数释放了我的readyForDeletion信号).使用 normal 指针时,我只是在对象上拨打QObject::deleteLater,但是对于QSharedPointer管理的实例,这是不可能的.我的解决方法如下: template class QSharedPointerContainer : public QObject { QSharedPointer m_pSharedObj; public: QSharedPointerContainer(QSharedPointer pSharedObj) : m_pSharedObj(pSharedObj) {} // ==> ctor }; // ==> QSharedPointerContainer template vo
16 2023-09-01
编程技术问答社区
有关 QThread、QObject、线程亲和性和事件循环的困惑
我正在通过链接 您做错了 使用qthread以正确的方式part1 使用qthread以正确的方式part2 我对某些陈述感到困惑.在第一个链接中,它说 Qthread中的所有函数均已编写并打算从创建线程中调用,而不是Qthread启动的线程. 虽然建议使用moveToThread将对象移至新线程,而不是子分类QThread.我的问题是: run方法调用的默认实现exec,它创建事件循环,当对象的 thread Affinity 使用moveToThread更改时, slots将在新线程中执行,而不是在创建线程上执行,这与上述 的预期使用矛盾.我想念什么吗? 第二个问题: 在第三个链接中被说 事件队列属于线程而不是事件循环,并且在此线程中运行的所有事件循环共享. 我的问题是如何在单个线程中有多个事件循环?我了解的是, event-loop 通过 emp event-quesue ,直到调用exit/terminate,然后处理每个
10 2023-07-25
编程技术问答社区
在 Qt 的组合框中添加 QObject
我有一个自定义的课程,说myclass.现在如何在下面的组合框中添加对myClass的参考作为第二个参数的引用: this-> ui-> combobox-> additem(" item-1",); 目的是到更改项目时,我想获得myClass的特定类实例并相应地处理. 解决方案 首先,您需要使用this->ui->comboBox->addItem("item-1", QVariant::fromValue(myClass)); 并将其恢复: this->ui->combobox->itemData(x).value(); 其他解决方案 上面的答案语法有些不正确, 在myClass标头文件中使用q_declare_metatype(myClass*),以便可以在qvariant中使用类型. 添加这样的项目: this-> ui-> combobox-> addItem(" item-1",qvariant ::
14 2023-07-25
编程技术问答社区
对解决 Qt 中 "对 vtable 的未定义引用 "问题毫无帮助
我无法使用错误的" customundostack的vtable vtable vtable"构建 这是代码: class CustomUndoStack : public QObject { Q_OBJECT public: }; int main(int argc, char *argv[]) { QCoreApplication qCoreApplication(argc, argv); CustomUndoStack uStack; return qCoreApplication.exec(); } 这是.pro文件: QT += widgets CONFIG += c++14 console CONFIG -= app_bundle DEFINES += QT_DEPRECATED_WARNINGS SOURCES += main.cpp 我已经手动删除了构建目录,我尝试了"清洁全部"和"重建",以所有
6 2023-07-25
编程技术问答社区
如何正确删除和终止 QThread
我有一个子类,它从QThread继承. 我与MainWindow实例(this)的父母一起创建它: mMyClass = new MyClass("some_value", 1, 5L, this); 我对QT如何处理对象删除的理解是,每个QObject在父母被删除时都会删除父母. 如果我的程序确实完成了,我会得到警告QThread: Destroyed while thread is still running 我该如何解决这个问题?我在MainWindow的解构器中使用以下代码尝试了它.不幸的是,它无法正常工作: if (mMyClass != 0 && mMyClass->isRunning()) { mMyClass->deleteLater(); mMyClass->quit(); mMyClass->wait(); } 解决方案 您尚未指定使用哪种版本的QT,所以我假设5.3. 另外,我相信您的线程代码您具
10 2023-07-25
编程技术问答社区
获取应用程序中创建的所有 QObjects 的列表
获取在应用程序中创建的所有Qwidget的列表,我们可以简单地调用QApplication::allWidgets(). 我已经阅读了该文档,但我还没有找到这样的东西来获取所有Qobject的列表.如果一个应用程序创建不是Qwidgets的独立Qobjects,则我没有这样的功能. 是否有一种获取此类列表的方法? 解决方案 首先要了解QObject和QWidget类之间的区别很重要. 类QOBJECT qObject实例具有指向其父的指针,该指针可能是一个无效的指针.只要您了解这是您对该实例的寿命的责任,即如果您不delete,就可以泄漏内存. ,创建一个无父母的qobject实例是非常合法的. . 类Qwidget 尽管您可以在没有父母的情况下创建Qwidget,但您不能.当您创建Qwidget"无父"的实例(即,通过提供无指针或让其默认为null指针)有效地设置为您的应用程序的Qapplication 1 实例. 是否有一种获取此
12 2023-07-25
编程技术问答社区
Qt: 使用 QObject::connect 指定多种连接类型
我想知道是否可以指定多种连接类型.例如,我希望我的连接类型是排队的连接和独特的连接.是否可以在一个语句中指定? QObject::connect(ptrSender,SIGNAL(..),ptrReceiver,SLOT(...),Queued-and-unique) 更新: 遵循海报的建议: 我尝试使用Qt::QueuedConnection | Qt::UniqueConnection,但我得到 `Error 1 error C2664: 'QMetaObject::Connection QObject::connect(const QObject *,const char *,const QObject *,const char *,Qt::ConnectionType)' : cannot convert parameter 5 from 'int' to 'Qt::ConnectionType' 解决方案 是否可以在一个语句中指定?
12 2023-07-25
编程技术问答社区
Q_PROPERTY 在 Qt 中的意义是什么?
我无法理解q_property的用法. Q_Property如何有助于制定程序防御?它是干什么用的?我已经看过论坛,但真的无法制作其应用程序.我已经理解了这个示例,但不是用法. 这是一个例子,我会从中获得什么.我知道阅读将仅具有阅读的特权. 写属性将赋予特权仅写作.但是它的需求是什么?有人可以举例说明它吗? class MyClass : public QObject { Q_OBJECT Q_PROPERTY(Priority priority READ priority WRITE setPriority NOTIFY priorityChanged) Q_ENUMS(Priority) public: MyClass(QObject *parent = 0); ~MyClass(); enum Priority { High, Low, VeryHigh, VeryLow }; vo
40 2023-07-25
编程技术问答社区
是否有可能在不删除 QObject 的情况下断开其所有连接?
i有一个qobject a,它连接到另一个qobjectB.现在我希望A连接到C,第三个QOBJECT,并完全断开b. 简单的peasy!麻烦的是,我有很多A都有自己的信号和插槽(B/C更通用).到目前为止,我一直在为每种不同类型类型手动建立连接和断开方法.这些方法基本上是彼此之间的副本,以connect交换disconnect disconnect呼叫,反对所以我的问题是:以下功能吗? void deleteAllConnections(QObject* someObject) { // TODO disconnect all connections owned by someObject // For bonus points: Is there a way of accessing the QMetaObject connected to? } 我在 qmetaObject , qobject 和信号和插槽没有运气的文档(尽管这通常不能保证...).
4 2023-07-25
编程技术问答社区