在Qt中处理多个ui文件

时间:2011-08-01 14:46:21

标签: c++ qt

我是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;
}

这没效果!你能告诉我什么是错的吗?

1 个答案:

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

修改

啊,所以FormQWidget类。您错过了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命名空间文件混淆。