我们知道,当使用QT创建者使用ui文件(例如mainwindow.ui)构建项目时,它将自动生成一个带有类定义的.h文件(例如.ui_mainwindow.h)。文件。 .h中生成的类如下:
我的问题是如何使生成的类如下:
QT_BEGIN_NAMESPACE
class Ui_MainWindow : MyBaseWindow
{
public:
QMenuBar *menuBar;
QToolBar *mainToolBar;
QWidget *centralWidget;
QStatusBar *statusBar;
答案 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继承。 然后选择您拖动的小部件并将其提升为自定义小部件。