繁体   English   中英

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

[英]Combine multiple widgets into one in Qt

我在一个项目中反复使用一对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,可能模仿列表和/或组合中的那些。

地址簿教程将指导您完成所有这些工作,包括创建自定义窗口小部件以及为其定义信号和插槽。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM