是否有可能有一个QWidget作为一个孩子到一个QObject?
-
22-09-2019 - |
题
我的主要应用对象是QObject
能够平衡一个QSystemTrayIcon
,一个QDialog
,一个QWindow
和其他一些部件。该应用大多坐落在托盘上,用一些选项对话框等等等等。
现在,我想在主对象使用QMetaObject::connectSlotsByName()
来连接信号从这些对象到时隙。这是他们的10-15,所以手写他们似乎没有有效的,正确的,专业的,现代的,等等等等。
不过,我不能用我的QObject
父到基于QWidget
对象,我也不能被改变的对象继承QWidget
,因为他们将不会出现,因为主要的对象是不可见的。
想法?
解决方案
连接信号给时隙手动是完全没有问题。 Qt的本身是这样做,最Qt应用程序都这样做。
我怕你不能使用connectSlotsByName
与QWidget
亲子问题,但如果你真的想要的话,你把所有的QMetaObject
提供的元数据,这样你就可以编写一个函数,作品就像任何connectSlotsByName
对/设定QObject
s的。
其他提示
您可以促进QObject
至隐藏QWidget
,请参见这个答案。简而言之:
#include <QtWidgets>
int main(int argc, char ** argv) {
QApplication app{argc, argv};
QWidget parent;
QLabel l1{"Close me to quit!"}, l2{"Hello!"};
for (auto label : {&l1, &l2}) {
label->setMinimumSize(200, 100);
label->setParent(&parent);
label->setWindowFlags(Qt::Window);
label->setText(QString("%1 Parent: %2.").
arg(label->text()).arg((quintptr)label->parent(), 0, 16));
label->show();
}
l2.setAttribute(Qt::WA_QuitOnClose, false);
return app.exec();
}
不隶属于 StackOverflow