在Qt中处理多个ui文件

Handling multiple ui files in Qt

本文关键字:ui 文件 处理 Qt      更新时间:2023-10-16

我是新的Qt框架,我试图加载另一个UI文件时,SubmitClicked。文件名为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;
}

这行不通!你能告诉我怎么了吗?

.ui文件只是存储GUI元素代码的地方。在大多数情况下,这些代码由QtDesigner生成。它在功能和形式上类似于Visual Studio的.rc文件和向导生成的GUI。这个文件要么在编译时加载(默认情况),要么在运行时通过QUiLoader加载。如果你想在运行时动态生成UI,后者是你需要从qtuittools

开始的选项。

在一个侧面说明类Form不存在于Qt,所以这是一个类你做或打字错误。如果你只是想声明和显示一个窗口或对话框,那么从适当的基类派生并调用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类。您是否在Form类中缺少Q_OBJECT宏?您通常也只调用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命名空间文件搞混了。