Qt: Как файлы * .ui и * .qss связываются с экземпляром класса MainWindow? - PullRequest
0 голосов
/ 26 января 2011

Это все еще какая-то загадка.Я использовал пример приложения Qt таблицы стилей, где он демонстрирует использование файлов * .ui и * .qss.

У них есть класс главного окна, который разработан в * .ui.Однако в коде вообще нет ссылок на любые * .ui или * .qss, и все же они связаны во время выполнения.Я не могу понять как.

это код для инициализации главного окна;

int main(int argc, char *argv[])
{
    Q_INIT_RESOURCE(stylesheet);
    QApplication app(argc, argv);
    MainWindow window;
    window.show();
    return app.exec();
}

Это код для главного окна ...

*. H:

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QtGui>

#include "ui_mainwindow.h"

class StyleSheetEditor;

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow();

private slots:
    void on_editStyleAction_triggered();
    void on_aboutAction_triggered();

private:
    StyleSheetEditor *styleSheetEditor;
    Ui::MainWindow ui;
};

#endif

*. Cpp:

include <QtGui>

#include "mainwindow.h"
#include "stylesheeteditor.h"

MainWindow::MainWindow()
{
    ui.setupUi(this);

    ui.nameLabel->setProperty("class", "mandatory QLabel");

    styleSheetEditor = new StyleSheetEditor(this);

    statusBar()->addWidget(new QLabel(tr("Ready")));

    connect(ui.exitAction, SIGNAL(triggered()), qApp, SLOT(quit()));
    connect(ui.aboutQtAction, SIGNAL(triggered()), qApp, SLOT(aboutQt()));
}

void MainWindow::on_editStyleAction_triggered()
{
    styleSheetEditor->show();
    styleSheetEditor->activateWindow();
}

void MainWindow::on_aboutAction_triggered()
{
    QMessageBox::about(this, tr("About Style sheet"),
        tr("The <b>Style Sheet</b> example shows how widgets can be styled "
           "using <a href=\"http://qt.nokia.com/doc/4.5/stylesheet.html\">Qt "
           "Style Sheets</a>. Click <b>File|Edit Style Sheet</b> to pop up the "
           "style editor, and either choose an existing style sheet or design "
           "your own."));
}

Может кто-нибудь объяснить, почему он просыпается с содержимым файла * .ui в моих ресурсах?

Ответы [ 2 ]

1 голос
/ 26 января 2011

Файлы пользовательского интерфейса не связаны напрямую. Процесс сборки Qt (обычно выполняется qmake) включает генерацию кода C ++ из файлов * .ui с использованием инструмента UIC, включенного в Qt. Он генерирует тот "ui_mainwindow.h", который вы включаете. Он содержит класс Ui :: MainWindow, который вы явно используете, так что это не загадка. Таким образом, ваш код не использует файлы * .ui напрямую, но он использует то, что сгенерировано из них.

Я не уверен насчет * .qss, так как я их не использовал. Но у вас есть вызов макроса Q_INIT_RESOURCE (), возможно, файл ресурсов содержит ссылку на файл * .qss. Если это так, то это означает, что этот файл включен в систему ресурсов Qt, которая является своего рода виртуальной файловой системой, локальной для приложения.

0 голосов
/ 26 января 2011

Файл пользовательского интерфейса обрабатывается uic для генерации файла ui_mainwindow.h. Посмотрите на этот файл, и вы увидите код, используемый для сборки вашего QMainWindow.

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