问:* .ui文件和* .qss文件如何与MainWindow类实例相关联?

时间:2011-01-26 19:59:34

标签: qt

它仍然有点神秘。我使用了样式表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 个答案:

答案 0 :(得分:1)

UI文件未直接关联。 Qt构建过程(通常由qmake完成)包括使用Qt附带的UIC工具从* .ui文件生成C ++代码。它会生成您包含的“ui_mainwindow.h”。它包含你明确使用的Ui :: MainWindow类,所以这并不神秘。因此,您的代码不直接使用* .ui文件,但它确实使用从它们生成的内容。

我不确定* .qss,因为我没有使用它们。但是你可以调用Q_INIT_RESOURCE()宏,也许资源文件包含对* .qss文件的引用。如果是,则表示该文件包含在Qt资源系统中,该系统是应用程序本地的一种虚拟文件系统。

答案 1 :(得分:0)

ui文件由uic处理,以生成ui_mainwindow.h文件。查看此文件,您将看到用于构建QMainWindow的代码。