1

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

qt .ui 文件生成类

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

QT_BEGIN_NAMESPACE

class Ui_MainWindow : MyBaseWindow
{
public:
    QMenuBar *menuBar;
    QToolBar *mainToolBar;
    QWidget *centralWidget;
    QStatusBar *statusBar;
4

1 回答 1

3

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

是的,我希望能够添加一些基本方法Ui_MainWindow

不,你没有。忘记你曾经以为你做到了。如果您坚持,您应该编辑问题以准确说明您要执行的操作:您要添加哪些方法以及它们的作用和用途?你要让我们相信你的方法很有可能首先变得有意义

这个Ui_MainWindow类从来没有被修改过。也许您正试图Qt Designer用作代码编辑器?它不是。该.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();
  }
};
于 2016-12-02T16:32:04.483 回答