Создатель QT, как заставить сгенерированный UI класс наследовать другой класс?

Мы знаем, что при использовании QT Creator для создания проекта с помощью файла пользовательского интерфейса (например, mainwindow.ui) он автоматически генерирует файл .h с определением класса (например, ui_mainwindow.h) для этого файла .ui. Сгенерированный класс в .h будет выглядеть следующим образом:

qt .ui файл сгенерированный класс

Мой вопрос как сделать сгенерированный класс будет следующим:

QT_BEGIN_NAMESPACE

class Ui_MainWindow : MyBaseWindow
{
public:
QMenuBar *menuBar;
QToolBar *mainToolBar;
QWidget *centralWidget;
QStatusBar *statusBar;

1

Решение

Ваша классическая проблема XY: вы ищете ответ на неправильный вопрос.

Да, я хочу иметь возможность добавить некоторые основные методы Ui_MainWindow

Нет, ты не Забудь, что ты когда-либо думал, что сделал. Если вы настаиваете, вы должны отредактируйте вопрос, чтобы точно указать, что вы пытаетесь сделать: какие методы вы пытаетесь добавить, что они делают и для чего? Это на вы чтобы убедить нас в том, что ваш подход в первую очередь имеет смысл.

Ui_MainWindow класс никогда не предназначался для изменения. Возможно, вы пытаетесь использовать Qt Designer как редактор кода? Это не так. .ui Файл не предназначен для переноса кода. Таким образом, сгенерированный из него вывод не предназначен для переноса написанного вами кода — только код, который реализует дизайн GUI.

Если вы хотите добавить методы, вы должны добавить их непосредственно в виджет, который использует Ui:: учебный класс. В конце концов, это класс значений, используемый для хранения множества указателей на вещи. Вы должны хранить его по значению внутри вашего виджета и добавлять методы к самому классу виджета. Вы даже можете сделать свой класс виджетов производным от Ui:: учебный класс:

class MyWidget : public QWidget, protected Ui::MyWidget {
...
};

Это делает любые методы MyWidget так хорошо, как методы, которые вы бы добавили к Ui::MyWidget сам.

Я только столкнулся с один случай, когда я хотел изменить uicкласс, и это было добавить метод к нему. Это было сделано для удобства и сохранения минимального изменения существующего кода в попытке его исправить. Для этого вы добавляете методы в производный класс:

template <typename T> MyUi : public T {
void myMethod();
};

class MyWidget : public QWidget {
MyUi<Ui::MyWidget> ui;
...
MyWidget(QWidget *parent = nullptr) : QWidget(parent) {
ui.setupUi(this);
ui.myMethod();
}
};
1

Другие решения

В GUI используйте виджет, ближайший к вашему пользовательскому виджету, то есть, если ваш пользовательский виджет подклассирует виджет QButton, вы перетаскиваете QButton в GUI. Как минимум, ваш класс должен иметь наследование QWidget.
Затем выберите виджет, который вы перетащили, и продвигайте его как свой собственный виджет.

О продвижении Qt: https://www.youtube.com/watch?v=VyVKbZAriK4

0

По вопросам рекламы [email protected]