我们知道,当使用QT creator建立一个带有ui文件(例如mainwindow.ui)的项目时,它会自动生成一个.h文件,其中包含该.ui的类定义(例如ui_mainwindow.h)文件。 .h 中生成的类如下:
我的问题是如何使生成的类如下所示:
QT_BEGIN_NAMESPACE
class Ui_MainWindow : MyBaseWindow
{
public:
QMenuBar *menuBar;
QToolBar *mainToolBar;
QWidget *centralWidget;
QStatusBar *statusBar;
最佳答案
Yes, I want to be able to add some basic methods to
Ui_MainWindow
不,你真的不知道。
Ui_MainWindow
类从来没有被修改过。也许您正在尝试将 Qt Designer
用作代码编辑器?它不是。 .ui
文件不包含任何代码。因此,从它生成的输出并不意味着携带您编写的代码 - 只是实现 GUI 设计的代码。
如果要添加方法,应将它们直接添加到使用Ui::
类的小部件中。毕竟,它是一个值类,用来保存一堆指向东西的指针。您应该按值将其存储在小部件内部,并将方法添加到小部件类本身。您甚至可以使您的小部件类派生自 Ui::
类:
class MyWidget : public QWidget, protected Ui::MyWidget {
...
};
这使得 MyWidget
的任何方法与您添加到 Ui::MyWidget
本身的方法一样好。
我记得一个实例,我想修改一个uic
生成的类,那是add a method to it .这是为了方便起见,并尽量减少对现有代码的更改,以尝试修复所述代码。为此,您将方法添加到派生类:
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();
}
};
关于c++ - QT creator如何让一个UI生成的类继承其他类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40923263/