Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/137.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ QT creator如何使UI生成的类继承其他类?_C++_Qt_Uic - Fatal编程技术网

C++ QT creator如何使UI生成的类继承其他类?

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 creator使用ui文件(例如mainwindow.ui)构建项目时,它会自动为该.ui文件生成一个带有类定义(例如ui_mainwindow.h)的.h文件。.h中生成的类如下所示:

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

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主窗口
类。你的解决方法似乎可行,但我正在尝试找到一种更优雅的方法。