2015-10-07 98 views
1

我是Qt新手,阅读了所有关于样式表的文档,并且我几乎知道如何样式化我的应用程序。我的文件是这样的:在Qt中加载外部样式表

Project/ -> babel.pro resources.qrc gui/ -> QtFiles, stylesheet.qss app/ -> main.cpp

我主要如下所示:

int main(int ac, char **av) { 
    MyApplication app(ac, av); 
    MyWidget widget; 

    QFile File(":/gui/stylesheet.qss");             
    File.open(QFile::ReadOnly); 
    QString StyleSheet = QLatin1String(File.readAll()); 

    app.setStyleSheet(StyleSheet); 
    widget.show(); 

    return app.exec(); 

} 

MyApplication.hpp:

class MyApplication : public QApplication { 

public: 

    MyApplication(int argc, char **av) : QApplication(argc, av) {} 
    virtual ~MyApplication() {} 
    virtual bool notify(QObject *rec, QEvent *ev) { 
    try { 
     return QApplication::notify(rec, ev); 
    } 
    catch (const std::exception &e) { 
     std::cerr << e.what() << std::endl; 
     exit(0); 
    } 
    return false; 
    } 
}; 

最后MyWidget.cpp:

MyWidget::MyWidget(QWidget *parent) : QWidget(parent) 
{ 
    QVBoxLayout *mainLayout = new QVBoxLayout; 

    setFixedSize(1920, 1200); 
    setWindowTitle(tr("Babel")); 

    _tabWidget = new QTabWidget; 
    _tabWidget->addTab(new Home(), tr("Home")); 
    _tabWidget->addTab(new Contact(), tr("Contact")); 

    _tabWidget->resize(10, _tabWidget->height()); 

    mainLayout->addWidget(_tabWidget); 
    setLayout(mainLayout); 
} 

我在babel.pro加入这一行(这是编译一般的.pro):RESOURCES += resources.qrc

但我有运行应用程序时,这个错误:QIODevice::read: device not open

编辑:

我的资源文件是这样的:

<!DOCTYPE RCC>                   
<RCC version="1.0"> 
    <qresource> 
     <file>/gui/stylesheet.qss</file> 
    </qresource> 
</RCC> 
+0

您是否将样式表文件添加到资源文件中? – SingerOfTheFall

+0

是的,我添加了 /gui/stylesheet.qss就像我在文档 –

+0

中读到的那样,你是否将它添加到'.qrc'文件中?如果是这样,你添加了一个前缀,还是你的文件看起来像' /gui/stylesheet.qss '? – SingerOfTheFall

回答

1

路径缺少的,所以/gui/stylesheet.qss成为./gui/stylesheet.qss“”!它如预期的那样工作。

谢谢你的时间家伙,一个愚蠢的错误,我不会重复!