QT Creator如何使UI生成的类继承其他类?

ric*_*cky 3 c++ qt uic

我们知道,当使用 QT Creator 构建带有 ui 文件(例如 mainwindow.ui)的项目时,它会自动生成一个 .h 文件,并为该 .ui 文件生成一个类定义(例如 ui_mainwindow.h)。.h 中生成的类如下:

qt .ui 文件生成的类

我的问题是如何使生成的类如下:

QT_BEGIN_NAMESPACE

class Ui_MainWindow : MyBaseWindow
{
public:
    QMenuBar *menuBar;
    QToolBar *mainToolBar;
    QWidget *centralWidget;
    QStatusBar *statusBar;
Run Code Online (Sandbox Code Playgroud)

Rei*_*ica 5

是的,我希望能够添加一些基本方法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)