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

时间:2011-12-03 08:55:13

标签: c++ qt widget

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

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

class CustomWidget
{
    QComboBox combo;
    QListWidget list;

    ...
};

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

1 个答案:

答案 0 :(得分: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教程将指导您完成所有这些工作,包括创建自定义窗口小部件并为其定义信号和插槽。