问题标签 [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.

0 投票
3 回答
22678 浏览

qt - 如何在 Qt 中复制对象?

我正在使用 Qt 并且有一些真正的基本问题。我创建了自己的小部件 MyTest ,它有一个变量obj。我需要obj从小部件外部的对象设置此变量,以便复制该变量而不仅仅是指向另一个对象的指针。我收到一条错误消息,无法弄清楚如何做这些基本的事情。这是我正在使用的代码:

我的测试.h:

我的测试.cpp:

主.cpp:

0 投票
2 回答
12031 浏览

c++ - QObject 克隆

我知道 Qobjects 应该是身份而不是值,例如,您不能复制它们,并且默认情况下,复制构造函数和赋值被禁用,如 qt 文档中所述。但是是否可以使用克隆方法从现有的 QObject 中创建一个新的 QObject?这会是逻辑错误吗?如果我说

或者

并且克隆方法会复制成员等内容,这是错误的吗?

如果可以,我可以编写自己的复制构造函数和赋值运算符吗?

注意:我实际上想尝试使用继承 qobject 的类。

0 投票
2 回答
775 浏览

c++ - 为什么我能够为 QObject 子类创建复制构造函数并重载赋值运算符?

我的印象是 QObject 禁用了复制构造函数和赋值运算符......为什么我能够编译包含这两者的 QObject 派生?

0 投票
11 回答
27576 浏览

c++ - Q_OBJECT 链接器错误!

我在构建应用程序时收到以下链接器错误。

HIMyClass.obj:: error: unresolved external symbol "public: virtual struct QMetaObject const * __thiscall CHIMyClass::metaObject(void)const" (?metaObject@CHIMyClass@@UBEPBUQMetaObject@@XZ) 找不到文件:HIMyClass.obj

HIMyClass.obj:: error: unresolved external symbol "public: virtual void * __thiscall CHIMyClass::qt_metacast(char const *)" (?qt_metacast@CHIMyClass@@UAEPAXPBD@Z) 找不到文件:HIMyClass.obj

HIMyClass.obj:: 错误:未解析的外部符号“public: virtual int __thiscall CHIMyClass::qt_metacall(enum QMetaObject::Call,int,void * *)” (?qt_metacall@CHIMyClass@@UAEHW4Call@QMetaObject@@HPAPAX@Z)找不到文件:HIMyClass.obj

我的班级声明就像

当我评论 Q_OBJECT 时,链接器错误消失(显然我无法使用信号和插槽)。我使用 Qt Creator 作为 IDE 和 Qt 4.5.3。当我给Rebuild All时,肯定会调用QMake 。我想,它的 moc_* 文件的生成是问题所在。我使用 Windows XP 和 cl 作为编译器。

此链接器错误背后的原因可能是什么?

0 投票
6 回答
1013 浏览

c++ - QT:将我的域对象基于 QObject 是一个好主意吗?

我对将 QT 框架与 C++ 结合使用相当陌生。我想知道:将我的域类基于 QObject 是个好主意吗?或者我应该只对层次结构中较高的类执行此操作?(更接近用户界面级别)。QT 文档对此并不清楚:

取自 QT 文档:

元对象系统是 C++ 扩展,使该语言更适合真正的组件 GUI 编程。

显然,我想以一种结构良好的方式构建我的应用程序。在过去的几天里,我一直在浏览 QT 文档以找到这个问题的答案。我不想犯一些基本的错误,这将使我的应用程序永远跛行;-)。

我已经查看了 QObject 和 Qt 对象模型的基本文档。我还发现了一篇关于新鲜肉类的文章,它有帮助,但并没有真正帮助我得出结论。让我感到困惑的另一件事是 QT 本身在这个问题上似乎并不一致,因为并非所有 QT 类都使用 QObject 作为基类。

在我看来,使用 QObject 作为基类的优势:

  • 等级制度
  • 信号和插槽
  • 特性
  • 能够使用受保护的指针
  • 国际化

但是,在我的大多数域类中,我不需要任何这些功能。对此有最佳实践规则吗?或者规则应该是:如果您需要上述任何一点,请使用它?

希望我没有让这太混乱:-)

0 投票
2 回答
1376 浏览

qt - 非 QObject 派生类“总是”应该放在堆栈上吗?

来自 Symbian 世界,我习惯于尽可能多地使用堆以避免耗尽堆栈空间,尤其是在处理描述符时。CBase 派生类总是在堆上动态分配,因为如果不是,它们的成员变量将保持未初始化状态。相同的约定是否适用于 QObject 派生类?

在 Qt 中,将例如 QString 放在堆栈上似乎很常见。当 QString 充当堆栈上的容器时,字符串内容是否放在堆上,还是所有内容都放在堆栈上?

0 投票
2 回答
4171 浏览

c++ - 为什么不使用 Q_OBJECT 宏编译(链接)?

我用 PyQt 制作了一个项目的原型并让它在那里工作,现在我正在尝试将它转换为 C++ 并且遇到了一些问题。

如果我不放入 Q_OBJECT 宏,它会编译并工作,但如果我将其注释掉,我会收到以下错误:

这是标题:

第二个问题是如果我在这里省略 Q_OBJECT 宏会发生坏事吗?

是的,我知道将 QGraphicsScene 称为“视图”是愚蠢的。

0 投票
2 回答
2639 浏览

visual-studio - cpp 文件中的 Qt、CMake、Visual Studio 和 Q_OBJECT

我正在为 Windows 平台使用 Qt 4.6、CMake 2.8 和 Visual Studio 2008 开发一个大型项目。

就构建系统而言,它都是标准的东西:我正在使用 CMake 的QT4_WRAP_CPP宏从头文件生成 moc 文件,然后将其链接到add_executable命令中的最终可执行文件。一切都按预期工作。

此设置的唯一限制是我无法 Q_OBJECT.cpp文件中定义小部件或帮助程序。这对于应该出现在使用它们的位置旁边的小型、特定于上下文的帮助器类来说非常方便。

我试图将整个源文件列表(.h.cpp)传递给QT4_WRAP_CPP,而不仅仅是头文件,但这不起作用(链接失败,因为一些与 moc 相关的符号未定义)。

我认为问题在于,对于给定的一对文件foo.hfoo.cppQT4_WRAP_CPP宏将在同一目录中生成相同的 moc 文件(moc_foo.cxx),显然这意味着第一个文件将被覆盖第二个,因此符号将在链接时丢失。

有没有办法解决或解决这个问题?例如,我尝试为表单的foo.cpp添加特定规则

然后添加

foo.cpp的末尾。我认为这应该可行,但是唉,Visual Studio 只允许每个文件有一个构建规则,并且.cpp文件已经有一个构建规则(编译到目标文件),所以这种方法不起作用,至少在 Visual Studio 中是这样。

我的另一个想法是创建一个新的宏,比如说QT4_WRAP_CPP_WITH_PREFIX,基于QT4_WRAP_CPP(在share/cmake-2.8/Modules/Qt4Macros.cmake中定义),它将采用一个额外的前缀参数并将这个前缀添加到生成的 moc文件。这样,我会调用QT4_WRAP_CPP_WITH_PREFIX两次,一次用于.h文件,一次用于.cpp文件,具有不同的前缀。我只是不喜欢这种方法,因为我会弄乱 CMake 的 Qt 支持的内部结构,而不是使用公共 API。

有更好的主意吗?

欢呼,弗朗茨

0 投票
4 回答
26625 浏览

c++ - When should Q_OBJECT be used?

The documentation states that:

The Q_OBJECT macro must appear in the private section of a class definition that declares its own signals and slots or that uses other services provided by Qt's meta-object system.

But exactly what does that mean? On which QObject-derived classes can I safely omit it? Will problems arise if you omit Q_OBJECT on a QObject-derived class, and then inherit from that one? Basically I would like a little more information on when I can omit it from my Qt classes.

0 投票
1 回答
22400 浏览

c++ - Qt 接口或抽象类和 qobject_cast()

我有一组相当复杂的 C++ 类,它们是从 Java 重写的。所以每个类都有一个继承类,然后它还实现了一个或多个抽象类(或接口)。

是否可以使用qobject_cast()从类转换为接口之一?如果我从 派生所有接口QObject,则会由于QObject引用不明确而出现错误。但是,如果我只有从 继承的基类QObject,则不能使用qobject_cast(),因为它与QObjects 一起使用。

我希望能够在插件和它们的接口引用的 DLL 之间抛出类。