c++ - QT creator如何让一个UI生成的类继承其他类?

标签 c++ qt uic

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

qt .ui file generated class

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

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/

相关文章:

c++ - Qt5 用户界面编译器 : -i option not available

c++ - 将 `const` CV 限定符应用于衰减数组样式 `T arr[]` 函数参数(旨在衰减到 `T * const arr` )

c++ - 部分预处理 C 或 C++ 源文件?

c++ - 单例还是信号和槽?

java - QGraphicsScene 像素图 GridView

c++ - 如何在 Qt Designer UI 文件中清除 QMainWindow 的几何标签

c++ - 使用函数的返回类型作为另一个模板函数调用

c++ - 是否可以关闭 gcc 的自动并行化?

c++ - 我可以自动调用继承 QObject 的仅 header 对象吗?

Python与qt Designer ui弹窗qlineEdit访问