问题标签 [qobject]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
qt - 声明了 QOBJECT 宏
我已经声明了 QOBJECT 宏,但它仍然调用函数而不传递 QObject 对象
这是我的代码 keyusermanagertest.cpp
keyusermanagertest.h
其编译输出如下“/home/puneet/puneet/office/alkimia/payment/backend/keyusermanagertest.cpp: In member function 'void KeyUserManagerTest::settersAndGetters()': /home/puneet/puneet/office/alkimia/ payment/backend/keyusermanagertest.cpp:52: 错误: 没有匹配函数调用'StorageUserManager::StorageUserManager()'/home/puneet/puneet/office/alkimia/payment/backend/storageusermanager.h:41: 注意: 候选人是: StorageUserManager::StorageUserManager(QObject*) /home/puneet/puneet/office/alkimia/payment/backend/storageusermanager.h:37:注意:StorageUserManager::StorageUserManager(const StorageUserManager&) /home/puneet/puneet/office/ alkimia/payment/backend/keyusermanagertest.cpp:53: 错误: 没有匹配函数调用'KeyUserManager::KeyUserManager(StorageUserManager*&)' /home/puneet/puneet/office/alkimia/payment/backend/keyusermanager.h:44: 注意:候选人是: KeyUserManager::KeyUserManager(StorageUserManager*, QObject*) /home/puneet/puneet/office/alkimia/支付/后端/keyusermanager.h:41: 注意: KeyUserManager::KeyUserManager(const KeyUserManager&)
谢谢
compilation - 为什么 Qt Creator 在我的所有文件上运行 MOC?
我有一个启用了预编译头文件的 Qt 项目。直到最近,编译工作正常。但是自从露水的日子以来,我注意到 Qt Creator 总是在我所有的 Q_OBJECT 文件上运行 MOC,即使是那些没有被更改的文件。正因为如此,许多 CPP 文件也需要无缘无故地重建。
有什么理由会发生这种情况吗?我正在查看编译输出,但没有看到任何特别之处。任何的想法?
visual-studio - Visual C++ 中的 Q_OBJECT 问题
我从我们的客户那里收到了一个基于 Visual C++ QT 的项目。我已经安装了 QT 库,然后我已经编译了该项目。项目编译没有任何问题。
现在,我需要在现有项目中包含一个新的附加 GUI 界面。我在 QT 设计器中创建了一个 GUI,然后保存在 VC++ 项目的源目录中。然后我为新的 GUI 编写了 .h 和 .cpp 文件并且可以调用这个接口。现在,当我在 .h 文件中包含 Q_OBJECT 时,我需要包含 SIGNALS 和 SLOTS。我有编译错误。
这些是错误,请帮我解决这个问题:
visual-studio-2008 - 无法找到退出槽,并使用 Q_OBJECT 宏
我正在使用带有 QT 4.7.1 和插件的 VS2008。我是这个环境的新手。
我设法进行必要的设置并运行简单的“hello world”。但是当我尝试
quit()
在单击按钮时使用简单插槽时,我失败了。尝试使用时也会导致构建失败Q_OBJECT
。
注释Q_OBJECT
代码构建和调试后。现在它显示
QObject::connect : 在 .\main.cpp 中找不到这样的插槽 QWidget::quit()。
下面是我的代码
我已经通过网络搜索但未能得到合理的解决方案。大多数解决方案都是用于在命令行上使用 qmake。我还可以找到该项目的 .pro 文件。
任何帮助表示赞赏。
c++ - 使用 QThread 和 QWidget 进行多重继承(使用 QObject 进行多重继承)
我要设计OgreWidget
类 - 带有 Qt 的便携式渲染器小部件。
(根据我的设计),我认为我的类需要继承QThread
(用于无限渲染循环)和QWidget
(用于 ogre 在那里渲染的目标小部件)。
但是根据许多文档和文章(例如this),QObject
不支持虚拟继承。这种继承的结果会是这样一个错误:
QObject
是一个模棱两可的基础OgreWidget
我应该如何解决这个问题?
PS:在我的旧设计中,我创建了一个单独的QWidget
,并将它发送WId
到我OgreWidget
的目标小部件。不过,我现在要设计一个更好、更干净的界面。
c++ - QObject双重删除
我目前在 Mac OS X 10.6 上运行 Qt 4.7.4。我使用 MacPorts 安装了 Qt。
我一直在尝试使用测试驱动开发作为我编码实践的一部分,为此我正在使用 QtTest。我有一个从 QObject 派生的类,当我尝试测试代码时,我的测试在它应该通过时失败了。我查看了 (test -vs) 的输出,发现以下错误:
信息:周期表::ElementTest::testName()信号:QObject(7fff5fbfd860)被破坏((QObject *)7fff5fbfd860)
在一个测试用例中,我两次观察到上述错误,将实际测试夹在中间。这表明子对象在使用前已被销毁,并且在测试后似乎再次被删除。我已经使用 QPointer 并确认该对象在使用前变得无效。另一种方法是在每个测试用例中初始化变量,从而违背了单次初始化的目的,进而增加了代码膨胀。
我使用以下命令(通过 cmake):
g++ -D_FORTIFY_SOURCE=2 -D_GLIBCXX_FULLY_DYNAMIC_STRING -D_FORTIFY_SOURCE=2 -DQT_TEST_LIB -DQT_CORE_LIB -DQT_DEBUG -Wformat-security -Wmissing-format-attribute -Wformat=2 -Wctor-dtor-privacy -Wabi -Woverloaded-virtual -Wsign-promo -Wformat-非文字 -Wdisabled-optimization -Wformat-y2k -Winit-self -Winvalid-pch -Wunsafe-loop-optimizations -Wmissing-format-attribute -Wmissing-include-dirs -Wstrict-aliasing=3 -Wswitch-enum -Wvariadic-macros - wvolatile-register-var -std=gnu++0x -fmessage-length=0 -ftree-vectorize --param max-unroll-times=4 -pipe -fabi-version=4 -g -I/opt/local/include /QtCore -fPIC -fstack-protector -fPIC -fstack-protector -Wstack-protector
我不记得在 Qt 4.6 中遇到过这个问题,而且我对过早的破坏感到困惑。
我想这不是 Qt 中的错误,但我很好奇是否有其他人遇到过这样的问题并找到了解决方案。我喜欢 Qt,但这个问题不仅限于单元测试。任何帮助都将不胜感激。
- 编辑 -
测试用例源代码:
在 .h 文件中
在 .cpp 文件中
c++ - 如何在不从 QObject 派生的情况下使用 SIGNAL 和 SLOT?
或以其他方式表达我的问题(尽管它没有解决我的问题):'QObject::QObject' 无法访问在类'QObject' 中声明的私有成员
我的班级需要 SIGNAL 和 SLOTS 功能,但我认为如果不从QObject
?
问题似乎是我需要从中派生QObject
以使用信号和插槽......但我需要MyClass
. 但由于以下特性,我无法构造它们QObject
:
No Copy Constructor or Assignment Operator。
我试了很多...
所以我的 shou Class 看起来像这样:
我需要MyClass
.
那么有没有可能避免“'QObject :: QObject'无法访问在类'QObject'中声明的私有成员”错误?
或者作为替代方案是否有可能使用没有 的信号和插槽QObject
?
我很高兴有任何建议。
c++ - (Qt Creator - 基于 Cpp 的应用程序) QVS 使用指针?
这是我的代码:
是否更有效(这里是“Q[Objects] VS using Pointers?”问题的一部分):
1)像我实际做的那样使用指针或
2)使用对象(去掉*+delete语句)
谢谢!
c++ - 如何枚举 Qt 中的所有 QObject 类?
有没有办法枚举在应用程序或 DLL 中声明的所有 QObject 类?我正在尝试创建一个加载 DLL 并列出 DLL 中的所有 QObject 类的应用程序。
更新:实际上我正在尝试创建一个单元测试 GUI。它将加载 DLL,在内部实例化 QObject,并针对它们调用 QTest::qExec。
qt - Qt:将基类方法带入派生类的槽中
我有一个派生自 QWidget 和模型类的类。根据我的阅读,我不能让模型类从 QObject 派生。
模型类MyModelClass已经具有设置属性的方法,例如 setWidth(bool)。看来我不能直接将这些方法用作插槽。如果我声明:
QObject::connect(button, SIGNAl(dataChanged(bool)), this, SLOT(setWidth(bool)));
Qt 在运行时抱怨没有插槽 setWidth(bool)。我必须手动将每个方法添加到 PageWidget 中,它只是调用了与 MyModelClass 相同的方法。
有没有办法在不重新声明每个方法的情况下将基本方法带入插槽?