それはQObjectの子としてのQWidgetを持つことは可能ですか?
-
22-09-2019 - |
質問
私のメインのアプリケーションオブジェクトは、QObject
をjuggles 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