Періодично виникають питання пов'язані з успадкуванням віджетів та застосування успадкованих віджетів у рамках графічного дизайнера Qt Designer.
Якщо застосування віджету в рамках коду загалом є зрозумілим, то як прикрутити кастомний віджет до ui форми на перший погляд не зрозуміло.
Давайте подивимося на прикладі спадкової кнопки QPushButton.
Спеціальна кнопка
Даний клас 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. Приходится тратить дополнительно силы на его изучение, а иногда некотроые вещи запрятаны очень глубоко в нём.