它仍然有点神秘。我使用了样式表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文件的内容吗?
答案 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的代码。