Evgenii Legotckoi
9 июля 2018 г. 16:14

Qt/C++ - Урок 082. Кастомные виджеты в графическом дизайнере Qt Designer

Периодически возникают вопросы связанные с наследованием виджетов и применении наследованных виджетов в рамках графического дизайнера Qt Designer.

Если применение виджета в рамках кода в целом является понятным, то как прикрутить кастомный виджет к ui форме на первый взгляд не понятно.

Давайте посмотрим на примере наследованной кнопки QPushButton.


CustomButton

Дан класс CustomButton, который наследован от QPushButton и в нём переопределён метод mousePressEvent. Вы не увидите в данном коде ничего особенного, он просто показывает, как написать класс, который наследован от какого-либо виджета в Qt.

CustomButton.h

  1. #ifndef CUSTOMBUTTON_H
  2. #define CUSTOMBUTTON_H
  3.  
  4. #include <QPushButton>
  5.  
  6. class CustomButton : public QPushButton
  7. {
  8. Q_OBJECT
  9. public:
  10. explicit CustomButton(QWidget *parent = nullptr);
  11.  
  12. // QWidget interface
  13. protected:
  14. virtual void mousePressEvent(QMouseEvent* event) override;
  15. };
  16.  
  17. #endif // CUSTOMBUTTON_H

CustomButton.cpp

  1. #include "CustomButton.h"
  2.  
  3. CustomButton::CustomButton(QWidget *parent) : QPushButton(parent)
  4. {
  5.  
  6. }
  7.  
  8.  
  9. void CustomButton::mousePressEvent(QMouseEvent* event)
  10. {
  11. // ToDo something
  12.  
  13. QWidget::mousePressEvent(event);
  14. }

Добавление кастомного виджета на ui-форму

1) Дана форма класса Widget, в которой ничего нет

2) Добавим на неё стандартную кнопку QPushButton

3) Вызвать контекстное меню правой кнопкой мыши и нажмите пункт "Преобразовать в..."

4) В открывшемся диалоговом окне внести имя преобразованного класса и имя заголовочного файла. В нашем случае это будет:

  • имя класса CustomButton
  • заголовочный файл CustomButton.h

И нажать кнопку добавить в диалоговом окне

5) Выбрать преобразованный класс и нажать кнопку преобразовать

Рекомендуемые статьи по этой тематике

По статье задано0вопрос(ов)

3

Вам это нравится? Поделитесь в социальных сетях!

Благодарю, а я решил весь GUI в коде писать из-за того, что года два назад не нашел ответ на этот вопрос :) Плохо искал :C

Наверное, поэтому некоторые программисты недолюбливают Qt Designer. Приходится тратить дополнительно силы на его изучение, а иногда некотроые вещи запрятаны очень глубоко в нём.

Комментарии

Только авторизованные пользователи могут публиковать комментарии.
Пожалуйста, авторизуйтесь или зарегистрируйтесь