2011-12-03 70 views
5

我在項目中反覆使用一對QComboBoxQListWidget。他們的交互是高度耦合的 - 當在組合框中選擇一個項目時,列表以某種方式被過濾。我複製粘貼這兩個小部件之間的所有信號和插槽連接跨多個對話框實現,我不認爲這是一個好主意。將多個小部件合併到一個Qt中

是否可以創建一個自定義小部件,它將容納這兩個小部件,並將所有信號和插槽連接在一個地方?如下所示:

class CustomWidget 
{ 
    QComboBox combo; 
    QListWidget list; 

    ... 
}; 

我想將此小部件用作單個小部件。

回答

11

這樣做的常用方法是子類QWidget(或QFrame)。

class CustomWidget: public QWidget { 
Q_OBJECT 

CustomWidget(QWidget *parent) 
    : QWidget(parent) { 
    combo = new QComboBox(...); 
    list = new QListWidget(...); 
    // create the appropriate layout 
    // add the widgets to it 
    setLayout(layout); 
} 

private: 
    QComboBox *combo; 
    QListWidget *list; 

}; 

處理所有的列表,並在自定義插件的組合(通過適當的信號連接到相應的插槽中,可能定義這個你自己的槽)之間的相互作用。

然後,您通過專用信號和插槽暴露您的自定義小部件的行爲/ API,可能模仿列表和/或組合中的那些。

Address book教程將引導您瞭解所有這些,包括創建自定義小部件併爲其定義信號和插槽。

相關問題