在Qt中加载外部样式表

时间:2015-10-07 09:58:43

标签: c++ qt

我是Qt的新手,我阅读了有关Stylesheets的所有文档,我几乎知道如何设置我的应用程序样式。我的文件是这样的:

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>

1 个答案:

答案 0 :(得分:1)

路径缺少“。”,因此/gui/stylesheet.qss变为./gui/stylesheet.qss!它按预期工作..

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