我们知道,当使用 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;
Run Code Online (Sandbox Code Playgroud)
是的,我希望能够添加一些基本方法
Ui_MainWindow
不,你真的不知道。
该类Ui_MainWindow从来没有打算被修改。也许您正在尝试用作Qt Designer代码编辑器?事实并非如此。该.ui文件并不意味着携带任何代码。因此,它生成的输出并不意味着携带您编写的代码 - 仅包含实现 GUI 设计的代码。
如果您想添加方法,您应该将它们直接添加到使用该类的小部件中Ui::。毕竟,它是一个用于保存一堆指向东西的指针的值类。您应该按值将其存储在小部件内,并向小部件类本身添加方法。您甚至可以使您的小部件类从该类派生Ui:::
class MyWidget : public QWidget, protected Ui::MyWidget {
...
};
Run Code Online (Sandbox Code Playgroud)
这使得任何方法都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();
}
};
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2295 次 |
| 最近记录: |