我是Qt框架的新手,我正在尝试在SubmitClicked时加载另一个UI文件。文件名是Form.ui
//MainWindow.cpp
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include "form.h"
#include <QtCore/QCoreApplication>
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent), ui(new Ui::MainWindow)
{
ui->setupUi(this);
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow:: SubmitClicked()
{
Form* f= new Form(this);
f->show();
f->raise();
f->activateWindow();
}
//Form.cpp
#include "form.h"
#include "ui_form.h"
Form::Form(QWidget *parent) :
QWidget(parent),
ui(new Ui::Form)
{
ui->setupUi(this);
}
Form::~Form()
{
delete ui;
}
这没效果!你能告诉我什么是错的吗?
答案 0 :(得分:1)
.ui文件只是存储GUI元素代码的地方。在大多数情况下,此代码由QtDesigner生成。它类似于Visual Studio的.rc文件和向导生成的GUI功能和形式。此文件将在编译时加载,这是默认值,或在运行时通过QUiLoader
加载。如果您希望在运行时动态生成UI,则需要从QtUiTools
另一方面,Qt中不存在类Form
,因此这是您制作的课程或拼写错误。如果您只是想声明并显示一个窗口或对话框,那么从相应的基类派生并调用show()
或适当的方法。
例如像这样简单的事情,其中MainWindow
是您自己的用户定义的类派生自QMainWindow
:
#include <QApplication>
#include "mainwindow.h"
int main(int argc, char *argv[])
{
Q_INIT_RESOURCE(application);
QApplication app(argc, argv);
MainWindow mainWin;
mainWin.show();
return app.exec();
}
修改强>
啊,所以Form
是QWidget
类。您错过了Q_OBJECT
课程中的Form
宏吗?您通常只需要为应用程序的主窗口调用setupUi
一次以加载资源,例如用户定义的子类,通常更容易以编程方式为类定义gui对象。
//Form.h
class Form : public QWidget
{
Q_OBJECT // this is needed for the MOC aka qmake
public:
Form(QWidget *parent);
virtual ~Form();
private:
QTextEdit m_text;
};
//Form.cpp
#include "form.h"
Form::Form(QWidget *parent) : QWidget(parent)
{
setCentralWidget(&m_text);
}
Form::~Form()
{
}
这听起来几乎就像是你的类对象与你的ui命名空间文件混淆。