2009-10-18 47 views
1

我的主要應用對象是QObject,這個對象是一個QSystemTrayIcon,一個QDialog,一個QWindow和一些其他組件。該應用程序主要坐在托盤,一些選項對話框等。是否可以將QWidget作爲QObject的子項?

現在,我想使用QMetaObject::connectSlotsByName()來將這些對象的信號連接到主要對象的插槽。這是他們的10-15,所以手寫他們似乎沒有有效的,正確的,專業的,現代的,等等等等

但是,我不能用我的QObject父到QWidget爲基礎的對象,也不能我將對象更改爲繼承QWidget,因爲它們不會顯示,因爲主對象不可見。

想法?

+0

相關問題(不重複):http://stackoverflow.com/q/28992276/1329652 – 2017-03-03 20:07:34

回答

1

手動將信號連接到插槽是非常好的。 Qt本身就是這樣做的,大多數Qt應用程序都是這樣做的。

恐怕你不能使用connectSlotsByName的親子問題與QWidget,但如果你真的想要的話,你擁有所有可用的元數據QMetaObject,所以你可以寫上就像connectSlotsByName功能任何一雙/一套QObject s。

+0

我連一些插槽也一樣,它只是一個不屑的10-20做他們。 :) ..寫我自己的功能聽起來像一個很好的計劃,但。謝謝! – Macke 2009-10-19 07:24:48

2

您可以將QObject升級爲隱藏QWidget,請參閱this answer。簡而言之:

#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(); 
} 
相關問題