Периодически возникают вопросы связанные с наследованием виджетов и применении наследованных виджетов в рамках графического дизайнера Qt Designer.
Если применение виджета в рамках кода в целом является понятным, то как прикрутить кастомный виджет к ui форме на первый взгляд не понятно.
Давайте посмотрим на примере наследованной кнопки QPushButton.
CustomButton
Дан класс CustomButton, который наследован от QPushButton и в нём переопределён метод mousePressEvent. Вы не увидите в данном коде ничего особенного, он просто показывает, как написать класс, который наследован от какого-либо виджета в Qt.
CustomButton.h
- #ifndef CUSTOMBUTTON_H
- #define CUSTOMBUTTON_H
- #include <QPushButton>
- class CustomButton : public QPushButton
- {
- Q_OBJECT
- public:
- explicit CustomButton(QWidget *parent = nullptr);
- // QWidget interface
- protected:
- virtual void mousePressEvent(QMouseEvent* event) override;
- };
- #endif // CUSTOMBUTTON_H
CustomButton.cpp
- #include "CustomButton.h"
- CustomButton::CustomButton(QWidget *parent) : QPushButton(parent)
- {
- }
- void CustomButton::mousePressEvent(QMouseEvent* event)
- {
- // ToDo something
- QWidget::mousePressEvent(event);
- }
Добавление кастомного виджета на ui-форму
1) Дана форма класса Widget, в которой ничего нет
2) Добавим на неё стандартную кнопку QPushButton
3) Вызвать контекстное меню правой кнопкой мыши и нажмите пункт "Преобразовать в..."
4) В открывшемся диалоговом окне внести имя преобразованного класса и имя заголовочного файла. В нашем случае это будет:
- имя класса CustomButton
- заголовочный файл CustomButton.h
И нажать кнопку добавить в диалоговом окне
5) Выбрать преобразованный класс и нажать кнопку преобразовать
Благодарю, а я решил весь GUI в коде писать из-за того, что года два назад не нашел ответ на этот вопрос :) Плохо искал :C
Наверное, поэтому некоторые программисты недолюбливают Qt Designer. Приходится тратить дополнительно силы на его изучение, а иногда некотроые вещи запрятаны очень глубоко в нём.