是否可以将 QWidget 作为 QObject 的子级?
我的主要应用程序对象是一个 QObject,它兼顾了 QSystemTrayIcon、QDialog、QWindow 和其他一些对象成分。该应用程序主要位于托盘中,带有一些选项对话框等。
现在,我想使用 QMetaObject::connectSlotsByName() 将来自这些对象的信号连接到主对象中的插槽。其中有 10-15 个,因此手工编写它们似乎并不高效、正确、专业、现代等。
但是,我不能使用我的 QObject
作为 的父级基于 QWidget
的对象,我也无法更改该对象以继承 QWidget
,因为它们不会显示,因为主对象不可见。
有想法吗?
My main application object is a QObject
, that juggles a QSystemTrayIcon
, a QDialog
, a QWindow
and a few other components. The app mostly sits in the tray, with some options dialogs etc etc.
Now, I'd like to use QMetaObject::connectSlotsByName()
to connect signals from these objects to slots in the main object. It's 10-15 of them, so writing them by hand doesn't seem efficient, right, professional, modern, etc etc.
However, I can't use my QObject
as parent to the QWidget
based objects, nor can I change the object to inherit QWidget
, as they will not show up, since the main object isn't visible.
Ideas?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
您可以将
QObject
提升为隐藏的QWidget
,请参阅此答案。简而言之:You could promote the
QObject
to a hiddenQWidget
, see this answer. In a nutshell:手动将信号连接到插槽是完全没问题的。 Qt 本身正在这样做,大多数 Qt 应用程序也在这样做。
恐怕您无法使用
connectSlotsByName
来解决QWidget
的父子问题,但如果您确实想要它,您可以在中使用所有可用元数据QMetaObject
,因此您可以在任何QObject
对/集合上编写一个类似于 connectSlotsByName 的函数。Connecting signals to slots manually is perfectly fine. Qt itself is doing that, most Qt applications are doing that.
I'm afraid you can't use
connectSlotsByName
for the parent-child issues withQWidget
, but if you really want it, you have all the metadata available inQMetaObject
, so you can write a function that works likeconnectSlotsByName
on any pair/set ofQObject
s.