在Qt中将多个小部件合并为一个小部件

Don*_*alo 5 c++ qt widget

我反复使用一对QComboBox,并QListWidget在一个项目中.他们的交互是高度耦合的 - 当在组合框中选择项目时,列表以某种方式被过滤.我在多个对话框实现中复制粘贴这两个小部件之间的所有信号和插槽连接,我认为这不是一个好主意.

是否可以创建一个自定义小部件,它将容纳这两个小部件,并将所有信号和插槽连接在一个地方?如下所示:

class CustomWidget
{
    QComboBox combo;
    QListWidget list;

    ...
};
Run Code Online (Sandbox Code Playgroud)

我想将此小部件用作单个小部件.

Mat*_*Mat 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;

};
Run Code Online (Sandbox Code Playgroud)

处理该自定义小部件中列表和组合之间的所有交互(通过将适当的信号连接到适当的插槽,可能为此定义您自己的插槽).

然后,您通过专用信号和插槽公开自定义窗口小部件的行为/ API,可能模仿列表和/或组合中的那些.

地址簿教程引导您完成所有这一切,包括创建一个自定义窗口小部件,并定义了它的信号和槽.