QT创建者如何让UI生成的类继承其他类?

时间:2016-12-02 01:21:13

标签: c++ qt uic

我们知道,当使用QT创建者使用ui文件(例如mainwindow.ui)构建项目时,它将自动生成一个带有类定义的.h文件(例如.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;

2 个答案:

答案 0 :(得分:1)

你的是一个经典的XY问题:你正在寻找错误问题的答案。

  

是的,我希望能够为Ui_MainWindow

添加一些基本方法

不,你没有。忘记你曾经以为你做过。如果你坚持,你应该编辑问题以准确指出你想要做什么:你想要添加什么方法,他们做什么以及做什么?它在你< / strong>让我们相信你的方法首先有机会有意义。

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();
  }
};

答案 1 :(得分:0)

在GUI中,使用最接近自定义窗口小部件的窗口小部件,即如果您的自定义窗口小部件是QButton窗口小部件的子类,则将QButton拖到GUI中。至少,您的类应该具有QWidget继承。 然后选择您拖动的小部件并将其提升为自定义小部件。

关于Qt推广活动:https://www.youtube.com/watch?v=VyVKbZAriK4