草庐IT

c++ - 如何在从 QObject 派生的类上正确使用 qRegisterMetaType?

我一直在寻找答案,但无济于事。我的感叹如下:我有一个大致如下所示的ClassA:classClassA:publicQObject{Q_OBJECTpublic:ClassA(){mName="lol";}~ClassA();voidShowName(){std::cout当然,由于我使用的是moc,所以这个类在我的项目中实际上分为cpp和hpp,但这部分不是这里的问题。请注意,我没有故意使用Q_DECLARE_METATYPE,因为我现在实际上并不需要它的功能(QVariant扩展)。我只关心运行时实例化。这里的问题是Q_OBJECT禁止复制和赋值构造函数。因此,我必须将qRegis

c++ - 为什么 QObject::disconnect(const QMetaObject::Connection &connection) 采用 const 参数来修改它?

staticboolQObject::disconnect(constQMetaObject::Connection&connection)此方法旨在断开现有的Connection对象以修改它。那么为什么将函数参数声明为const引用?在源码实现(qtbase/src/corelib/kernel/qobject.cpp)中,可以发现不可避免的const_cast:const_cast(connection).d_ptr=0;当函数的目的是修改它时,将函数参数标记为const有什么好处? 最佳答案 原因纯粹是历史原因。最初设想的AP

c++ - 如果从 QObject 派生的类的构造函数抛出,是否会发出 destroyed()?

我到处都看到像下面这样的QtGUI语法:myDialog::myDialog(QWidget*parent,Qt::WFlagsflags):QDialog(parent,flags){QPushButton*button=newQPushButton("&Download",this);QVBoxLayout*layout=newQVBoxLayout(this);//somethingthatcanthrowherelayout->addWidget(button);setLayout(layout);}我一直想知道这是否会在发生异常时泄漏,因为我作为父项给按钮和布局的“this”

c++ - QJSEngine 删除了我的 QObject,如何在 QJSEngine::newQObject 之后更改所有权?

尝试以子类QObject作为参数执行小脚本。QJSEnginejsEngine;QJSValuearg=jsEngine.newQObject(child);//Childit'ssubclassedQObjectQJSValuefunction=jsEngine.evaluate(m_childRestriction);QJSValueresult=function.call(QJSValueList()在销毁jsEngine时,它​​为我的子对象调用delete(因为newQObject使用JavaScriptOwnership创建它)。如何避免它,如何更改arg的所有权?脚本很简

c++ - 在 QML 中使 QList<QObject*> C++ 模型动态化

我有一个QList包含自定义对象并暴露给QML的C++模型。我的自定义对象如下所示:classCustomObject:publicQObject{Q_OBJECTQ_PROPERTY(QStringnameREADgetNameNOTIFYnameChanged)Q_PROPERTY(QQmlListProperty我的模型像这样暴露给QML:qmlEngine->rootContext()->setContextProperty("internalModel",QVariant::fromValue(m_internalModel));到目前为止一切顺利。我可以使用一个View,显

c++ - 读/写 QObject

我认为我可以通过利用Q_PROPERTY来编写这样的QObject:QDataStream&operatorpropertyCount();++i){if(obj.metaObject()->property(i).isStored(&obj)){dsproperty(i).read(&obj);}}returnds;}如果这是真的,我不知道为什么QObject还没有实现该方法,因为它非常通用。但这不是重点。我将如何阅读该文件?即实现这个功能?QDataStream&operator>>(QDataStream&ds,Object&obj){returnds;}我想我可以以某种方式使用

c++ - 连接lambda时如何将Qt::ConnectionType传递给QObject::connect?

我正在将lambda连接到QObject的信号:QObject::connect(handle,&BatchHandle::progressMax,[this](constProcessHandle*constself,constintvalue){this->maxProgress(value);});上面的代码编译没有问题。但是Qt::QueuedConnection是绝对必要的,因为handle对象最终会移动到另一个线程。我将此添加到我的代码中:QObject::connect(handle,&BatchHandle::finished,[this](constProcessHa

c++ - QObject::connect: 无法对类型为 'QVector<int>' 的参数进行排队

我在使用Qt时遇到了一些问题。我有一个带有信号的类,其参数是字符串和一个插槽。我正在将信号连接到类构造函数中的插槽。另外,我在类构造函数中创建了一个线程。该线程从服务器读取数据并更新UI(发出UpdateMe信号)。这就是我将信号连接到插槽的方式:QObject::connect(this,SIGNAL(UpdateMe(string,string)),this,SLOT(ModifyUI(string,string)));我有一个带有一些文件名的QTreeWidget。当我重命名文件时,我通知服务器,服务器通知其他客户端。当我连接单个客户端时没有问题,但是当我连接多个客户端时出现问题

c++ - QObject::deleteLater 跨 QThread

我正在寻找一种解决方案来安排跨线程删除对象。关于deleteLater行为方式的文档并不完全清楚。我可以在不是对象所有者的线程中调用此函数吗?例如,对象X由线程A拥有,而在线程B中我想删除对象X。由于该对象目前可能在事件处理中(在线程A中),在它返回消息循环之前我无法安全地删除它。如果我从线程B调用deleteLater但是文档似乎表明它会在线程B返回消息循环后立即删除。目前我采用的方法是在线程A中发出一个信号,该信号附加到调用deleteLater的插槽。我想知道是否有更简单的方法来执行此操作-如果确实可以从任何线程调用deleteLater。 最佳答案

c++ - 尽管类派生自 QObject,但定义自己的析构函数?

让我们有一个类Test和一个类AnotherClass。两者都派生自QObject。测试.h:classTest:publicQObject{Q_OBJECTpublic:Test(QObject*parent);~Test();private:AnotherClass*other;};classAnotherClass:publicQObject{Q_OBJECTpublic:AnotherClass(QObject*parent);~AnotherClass();};测试.cpp:Test::Test(QObject*parent):QObject(parent){other=ne