gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 05:19:57 25 4
gpt4 key购买 nike

我们知道,当使用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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com