草庐IT

c++ - 我怎样才能让 QThread 在不泄漏的情况下发出堆分配的 QObject?

我的情况是我有一个QWidget派生类MyWidget,它将创建一个QThread派生类(WorkerThread)以在其run()方法中执行一些不间断的阻塞工作。其结果是QObject派生类(DataClass)的堆分配实例,然后由MyWidget接收和处理。不过,MyWidget是一个临时小部件,可能会在WorkerThread仍在运行时因用户操作而被删除。下面是一些伪代码来说明这一点:#include#includeclassDataClass:publicQObject{Q_OBJECTpublic://containssomecomplexdata};classWorkerT

c++ - QObject 派生类型是否需要父 QObject?

我正在编写一些派生自QObject的Qt类,它看起来像:classA:publicQObject{Q_OBJECTpublic:A():QObject(){}.....}但是我在几个地方看到,QObject派生类都有一个父类,例如:classA:publicQObject{Q_OBJECTpublic:A(QObject*parent=0):QObject(parent){}.....}所以问题是:我是否需要parent?如果我有一个,如果我有一个默认的(0)或者我根本没有,有什么区别? 最佳答案 因此你不需要parent。但是设置

c++ - 如何安全地销毁 QThread?

我想在Qt5.3中正确地销毁一个QThread。到目前为止我有:MyClass::MyClass(QObject*parent):QObject(parent){mThread=newQThread(this);QObject::connect(mThread,SIGNAL(finished()),mThread,SLOT(deleteLater()));mWorker=newWorker();//inheritsfromQObjectmWorker->moveToThread(mThread);mThread->start();}MyClass::~MyClass(){mThread

c++ - QObject克隆

我知道Qobjects应该是身份而不是值,例如你不能复制它们,默认情况下,复制构造函数和赋值被禁用,如qt文档中所述。但是是否可以使用克隆方法从现有的QObject创建新的QObject?这会是逻辑错误吗?如果我说QObjectb;QObjecta;b.cloneFrom(a);或QObjecta=newQOBject();QObjectb=newQOBject();b->cloneFrom(a);克隆方法会复制成员等内容,这是错误的吗?如果可以的话,我可以编写自己的复制构造函数和赋值运算符吗?注意:我实际上想用继承qobject的类来尝试这个。 最佳答案

c++ - QObject::connect 没有匹配函数

我正在编写一个程序,每10毫秒发送一个UDP帧。以下是我的程序应该如何工作:我有一个客户端类://ConstructorclientSupervision::clientSupervision(){}voidclientSupervision::sendDataUDP(){//Createaframeandsendit...}voidclientSupervision::sendDataUDPTimer(inttimer){QTimer*tempsEnvoieTrameSupervision=newQTimer();//CreateatimertempsEnvoieTrameSuper

c++ - 有没有办法在qt中卸载eventfilter?

我只需要一段时间的事件过滤器,以后有没有办法卸载它? 最佳答案 请阅读eventsystemworksinQthere.这对于基本理解至关重要,尤其是这一段:TheQObject::installEventFilter()functionenablesthisbysettingupaneventfilter,causinganominatedfilterobjecttoreceivetheeventsforatargetobjectinitsQObject::eventFilter()function.Aneventfilterge

c++ - 有没有一种方法可以在不创建该类实例的情况下获取 QObject 派生类的类名?

我正在寻找这样的东西:MyClass::metaObject()->className()这是行不通的,因为在执行这段代码的地方,不存在MyClass的实例化。如果这在某种程度上是可能的,是否有办法获取从MyClass派生的类的所有名称? 最佳答案 使用staticmetaobject:MyClass::staticMetaObject.className()有效! 关于c++-有没有一种方法可以在不创建该类实例的情况下获取QObject派生类的类名?,我们在StackOverflow上

c++ - 任何将非 QObject 类与 QML 一起使用的机会

截至ExposingAttributesofC++TypestoQML与QML一起使用的类必须是QObject。我是否有机会使用非QObjectss(又名POCO,不是从QObject派生的,而是在Qt元系统中注册的)?如果没有,是否有一个简单的通用包装系统使我的对象符合QML标准。我能想到的一种是将动态属性添加到一个简单的QObject。或者有没有办法隐式转换为符合QML的类型,这样我根本不需要换行? 最佳答案 这实际上是一个热门话题。我相信您可以注册自己的POD并将它们传递给ito和QML端(就像黑盒子一样——没有任何成员访问权

c++ - 如何将 C++ 属性绑定(bind)到 QML 属性?

所以我知道如何将QML属性绑定(bind)到C++属性,所以当C++调用通知信号时,QML会更新View。当用户使用UI更改某些内容时,有什么方法可以使C++属性更新吗?例如,我有一个组合框,我希望在用户更改组合框的值时更新某些C++属性。编辑:我所说的C++属性是指QObject派生类中的Q_PROPERTY宏。 最佳答案 要从您未在QML中创建(或在其他上下文中创建)的对象绑定(bind)属性,您必须使用Binding.在你的情况下:Binding{target:yourCppObjectproperty:"cppPropert

c++ - 使用 static_assert 检查 Q_OBJECT 宏

如果我得到的类型声明不包含Q_OBJECT宏,我有一些有趣的需要显示编译错误。我发现了一种不好的方法。实际上它重复了Qt开发人员的想法来做同样的事情:templatevoidcheckForQObjectMacro(){reinterpret_cast(0)->qt_check_for_QOBJECT_macro(*reinterpret_cast(0));}这很好用,但确实给出了奇怪的错误消息。我想显示一条可读的消息。一种方法是使用static_assert构造。但我不知道如何实现Q_OBJECT宏存在的静态验证条件。也许有人可以提出一个漂亮的黑客?也非常感谢任何想法。