Мы знаем, что при использовании QT Creator для создания проекта с помощью файла пользовательского интерфейса (например, mainwindow.ui) он автоматически генерирует файл .h с определением класса (например, ui_mainwindow.h) для этого файла .ui. Сгенерированный класс в .h будет выглядеть следующим образом:
Мой вопрос как сделать сгенерированный класс будет следующим:
QT_BEGIN_NAMESPACE
class Ui_MainWindow : MyBaseWindow
{
public:
QMenuBar *menuBar;
QToolBar *mainToolBar;
QWidget *centralWidget;
QStatusBar *statusBar;
Ваша классическая проблема 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();
}
};
В GUI используйте виджет, ближайший к вашему пользовательскому виджету, то есть, если ваш пользовательский виджет подклассирует виджет QButton, вы перетаскиваете QButton в GUI. Как минимум, ваш класс должен иметь наследование QWidget.
Затем выберите виджет, который вы перетащили, и продвигайте его как свой собственный виджет.
О продвижении Qt: https://www.youtube.com/watch?v=VyVKbZAriK4