我的主要应用对象是QObject能够平衡一个QSystemTrayIcon,一个QDialog,一个QWindow和其他一些部件。该应用大多坐落在托盘上,用一些选项对话框等等等等。

现在,我想在主对象使用QMetaObject::connectSlotsByName()来连接信号从这些对象到时隙。这是他们的10-15,所以手写他们似乎没有有效的,正确的,专业的,现代的,等等等等。

不过,我不能用我的QObject父到基于QWidget对象,我也不能被改变的对象继承QWidget,因为他们将不会出现,因为主要的对象是不可见的。

想法?

有帮助吗?

解决方案

连接信号给时隙手动是完全没有问题。 Qt的本身是这样做,最Qt应用程序都这样做。

我怕你不能使用connectSlotsByNameQWidget亲子问题,但如果你真的想要的话,你把所有的QMetaObject提供的元数据,这样你就可以编写一个函数,作品就像任何connectSlotsByName对/设定QObjects的。

其他提示

您可以促进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();
}
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top