Обработка нескольких файлов пользовательского интерфейса в Qt - PullRequest
1 голос
/ 01 августа 2011

Я новичок в инфраструктуре Qt и пытаюсь загрузить другой файл пользовательского интерфейса, когда 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;
}

Это не сработало! Можете ли вы сказать мне, что не так?

1 Ответ

1 голос
/ 01 августа 2011

Файл .ui просто хранит код для элементов графического интерфейса.Этот код генерируется QtDesigner в большинстве случаев.Это похоже на файл .rc и графический интерфейс, сгенерированный мастером в Visual Studio.Этот файл будет загружен во время компиляции (по умолчанию) или во время выполнения через QUiLoader.Если вы хотите динамически генерируемый пользовательский интерфейс во время выполнения, последний вариант, который вам нужно рассмотреть, начиная с QtUiTools

Отметим, что класс 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();
}

Редактировать:

Ах, так что Form является QWidget классом.Вам не хватает макроса Q_OBJECT в вашем классе Form?Вы также, как правило, вызываете setupUi только один раз, чтобы главное окно приложения загружало ваши ресурсы, и в таких случаях, когда пользовательские подклассы часто проще программно определить объекты графического интерфейса для класса.

//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()
{
}

Звучитпочти как вы путаете ваш объект класса с вашими файлами пространства имен пользовательского интерфейса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...