在Qt中合并多个小部件

Combine multiple widgets into one in Qt

本文关键字:小部 合并 Qt      更新时间:2023-10-16

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

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

class CustomWidget
{
    QComboBox combo;
    QListWidget list;
    ...
};

我想把这个小部件作为一个小部件使用

通常的方法是将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,可能模仿列表和/或组合中的行为/API。

地址簿教程将引导您完成所有这些操作,包括创建自定义小部件并为其定义信号和插槽。