C++ QT creator如何使UI生成的类继承其他类?
我们知道,当使用QT creator使用ui文件(例如mainwindow.ui)构建项目时,它会自动为该.ui文件生成一个带有类定义(例如ui_mainwindow.h)的.h文件。.h中生成的类如下所示: 我的问题是如何生成生成的类如下:C++ QT creator如何使UI生成的类继承其他类?,c++,qt,uic,C++,Qt,Uic,我们知道,当使用QT creator使用ui文件(例如mainwindow.ui)构建项目时,它会自动为该.ui文件生成一个带有类定义(例如ui_mainwindow.h)的.h文件。.h中生成的类如下所示: 我的问题是如何生成生成的类如下: QT_BEGIN_NAMESPACE class Ui_MainWindow : MyBaseWindow { public: QMenuBar *menuBar; QToolBar *mainToolBar; QWidget
QT_BEGIN_NAMESPACE
class Ui_MainWindow : MyBaseWindow
{
public:
QMenuBar *menuBar;
QToolBar *mainToolBar;
QWidget *centralWidget;
QStatusBar *statusBar;
你的问题是典型的XY问题:你在寻找错误问题的答案 是的,我希望能够将一些基本方法添加到
Ui\u主窗口
不,你没有。忘了你曾经以为你做过。如果你坚持,你应该编辑问题,明确指出你想做什么:你想添加什么方法,它们做什么,为什么用?现在是你让我们相信你的方法首先很有可能有意义
从未打算修改Ui\u主窗口
类。也许您正试图使用Qt设计器
作为代码编辑器?事实并非如此。.ui
文件不能携带任何代码。因此,从它生成的输出也不意味着携带您编写的代码——只携带实现GUI设计的代码
如果您想添加方法,应该直接将它们添加到使用Ui::
类的小部件中。毕竟,它是一个值类,用来保存一堆指向东西的指针。您应该将其按值存储在小部件中,并向小部件类本身添加方法。您甚至可以从Ui::
类派生小部件类:
class MyWidget : public QWidget, protected Ui::MyWidget {
...
};
这使得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();
}
};
模板MyUi:public T{
void myMethod();
};
类MyWidget:publicqwidget{
MyUi;
...
MyWidget(QWidget*parent=nullptr):QWidget(parent){
ui.setupUi(这个);
ui.myMethod();
}
};
为什么?您将无法将其他方法添加到Ui\u主窗口
,因为它将在下次生成项目时被覆盖。作为一种解决方法,您可以创建一个“mix-in小部件”,将其以零大小添加到主窗口,并通过ui->mixin->foo()
获取其所有方法。谢谢Sergey。是的,我希望能够将一些基本方法添加到Ui\u主窗口
。我希望它能够在用户每次构建项目时生成预期的Ui\u主窗口
类。你的解决方法似乎可行,但我正在尝试找到一种更优雅的方法。