Объедините несколько виджетов в один в Qt - PullRequest
5 голосов
/ 03 декабря 2011

Я неоднократно использую пару QComboBox и QListWidget в проекте.Их взаимодействие тесно связано - когда элемент выбран в поле со списком, список каким-то образом фильтруется.Я копирую все соединения между этими двумя виджетами, использующие сигналы и слоты, в рамках реализации нескольких диалоговых окон, что я не считаю хорошей идеей.

Возможно ли создать собственный виджет, который будет содержать этидва виджета и будут ли все сигнальные и слотные соединения в одном месте?Примерно так:

class CustomWidget
{
    QComboBox combo;
    QListWidget list;

    ...
};

Я хочу использовать этот виджет как один виджет.

1 Ответ

11 голосов
/ 03 декабря 2011

Обычный способ сделать это - подкласс 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 вашего пользовательского виджета через выделенные сигналы и слоты, возможно имитируя те, что в списке и / или комбо.

Учебное пособие Адресная книга проведет вас через все это, включая создание собственного виджета и определение сигналов и слотов для него.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...