2011-01-26 23 views
0

まだまだ謎です。 * .uiと* .qssファイルの使い方を示すスタイルシートQtサンプルアプリケーションを使用しました。Qt:* .uiファイルと* .qssファイルはMainWindowクラスのインスタンスにどのように関連付けられますか?

これらは、* .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ファイルの内容

答えて

1

UIファイルは直接関連付けられていません。 Qtビルドプロセス(通常はqmakeによって行われます)には、Qtに含まれるUICツールを使用して* .uiファイルからC++コードを生成することが含まれます。それはあなたが含める "ui_mainwindow.h"を生成します。明示的に使用するUi :: MainWindowクラスが含まれているため、謎ではありません。だからあなたのコードは* .uiファイルを直接使用するのではなく、それらから生成されたものを使用します。

私はそれらを使用していないので、* .qssについてはわかりません。しかし、Q_INIT_RESOURCE()マクロを呼び出すと、リソースファイルに* .qssファイルへの参照が含まれている可能性があります。そうであれば、そのファイルはアプリケーションのローカル仮想ファイルシステムの一種であるQtリソースシステムに含まれていることを意味します。

+0

wow。ありがとう。それは "普通の" C++/GDI/Win32やC#/ .NETから来ている人には新しい考え方ですが、私はそれを理解しています。 – JasonGenX

0

ui_mainwindow.hファイルを生成するために、uiファイルはuicによって処理されます。このファイルを見ると、QMainWindowの構築に使用したコードが表示されます。

関連する問題