質問

私のメインのアプリケーションオブジェクトは、QObjectをjuggles QSystemTrayIconQDialogQWindowおよびその他のいくつかのコンポーネントです。アプリは、ほとんどのダイアログなどなど、いくつかのオプションを使用して、トレイに座っている。

今、私が主目的のスロットにこれらのオブジェクトからの接続信号にQMetaObject::connectSlotsByName()を使用したいと思います。それは手でそれを書いてなどなど、プロ、右、効率的で近代的ないないようだ、彼らの10-15です。

しかし、私はQObject基づいて、オブジェクトに対する親としての私のQWidgetを使用することはできません、また、主被写体が表示されていないので、彼らは、表示されませんように私は、継承QWidgetにオブジェクトを変更することができます。

アイデア?

役に立ちましたか?

解決

は、手動でスロットに信号を接続すると、完全に罰金です。 Qtは、それ自体がそれをやっている、ほとんどのQtアプリケーションはそれをやっている。

私はあなたがconnectSlotsByNameで親子の問題についてQWidgetを使用することはできません怖いんだけど、あなたが本当にそれをしたい場合は、任意の上QMetaObjectと同じように動作する関数を記述することができますので、あなたは、connectSlotsByNameで利用可能なすべてのメタデータを持っていますQObjectsのペア/セットます。

他のヒント

あなたはこの回答を参照、隠れたQObjectQWidgetを促進することができました。一言で言えば:

#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