【问题标题】:Reading a CSS file using Qt C++使用 Qt C++ 读取 CSS 文件
【发布时间】:2013-09-05 06:59:31
【问题描述】:

我正在尝试加载 CSS 文件以在整个 Qt 应用程序中进行格式化。目前,我的“stylesheet.css”文件与我构建的 exe(调试和发布)位于同一文件夹中。但是,在运行程序时它不会产生任何错误,只是输出“test:”,所以它显然没有找到文件或者我没有正确读取它?

如果这是一个愚蠢的错误,请原谅我 - 我对 Qt 和 C++ 都很陌生。

#include "mainwindow.h"
#include "qfile.h"
#include "qtextstream.h"
#include <QApplication>
#include <iostream>

int main(int argc, char *argv[])
{
    QApplication program(argc, argv);

    QFile styleFile("stylesheet.css");
    styleFile.open(QIODevice::ReadOnly);
    QTextStream textStream(&styleFile);
    QString styleSheet = textStream.readAll();
    styleFile.close();
    program.setStyleSheet(styleSheet);

    std::cout << "test: " << styleSheet.toStdString() << std::endl;

    MainWindow w;
    w.showMaximized();

    return program.exec();
}

【问题讨论】:

  • 通过 Qt 运行程序时复制源代码旁边的 CSS 文件。
  • QFile::open() 如果成功则返回 true。在尝试对其进行任何操作之前,您应该始终检查文件是否已成功打开。您还可以检查QFile::errorString() 发生的错误。
  • 谢谢大家——不过,经过更多研究后发现问题比我想象的要简单。另外,我一定会记得这样做,谢谢你的小费。在深入挖掘之后,事实证明我缺少一个 QRC 文件(我什至不知道它存在)。所以我创建了一个资源 (QRC) 文件,添加了前缀“/style”,然后将我的样式表添加到该前缀。它现在可以完美运行。此外,有一次我将 .css 更改为 .qss(我想我应该提到它,尽管我怀疑它有什么不同)。
  • @GeoffreyTucker 您应该发布您的解决方案作为答案并尽可能接受它。
  • 我实际上是先尝试这样做的——不过,它说我必须等待 8 小时才能获得少于 10 的声望。我一定会在明天的某个时间发布它

标签: c++ css qt file


【解决方案1】:

深入挖掘后,发现我缺少一个 QRC 文件(我什至不知道它存在)。所以我创建了一个资源 (QRC) 文件,添加了前缀“/style”,然后将我的样式表添加到该前缀。它现在可以完美运行。此外,有一次我将 .css 更改为 .qss(我想我应该提到它,尽管我怀疑它有什么不同)。

这是最终代码:

#include "mainwindow.h"
#include "qfile.h"
#include "qtextstream.h"
#include <QApplication>

int main(int argc, char *argv[])
{
    QApplication program(argc, argv);

    QFile styleFile(":/style/stylesheet.qss");
    if(styleFile.open(QIODevice::ReadOnly))
    {
        QTextStream textStream(&styleFile);
        QString styleSheet = textStream.readAll();
        styleFile.close();
        program.setStyleSheet(styleSheet);
    }

    MainWindow w;
    w.showMaximized();

    return program.exec();
}

【讨论】:

    【解决方案2】:

    改变

    QFile styleFile("stylesheet.css");
    

    QFile styleFile("C:/path/to/stylesheet.css");
    

    您需要为您的程序传递完整的文件路径才能找到该文件。如果你只是给出它的名字而不是它所在的目录,程序将只在当前目录中搜索它(不是一定是你的 exe 文件的目录),如果它不存在,它不会找到它。

    【讨论】:

    • 或者更确切地说,使用QApplication::applicationDirPath() 查找包含可执行文件的路径。
    • 是的,当然,他应该构造完整的文件路径,而不是硬编码。但这超出了他直接问题的范围,即他不了解相对路径和绝对路径。
    【解决方案3】:

    如果您想将此 CSS 文件与您的应用程序一起部署,您正在寻找 Qt resource file support

    【讨论】:

    • 谢谢!如果我昨晚自己没有弄清楚,我肯定会选择你的答案作为最佳答案(如我原来帖子的 cmets 所示)。
    【解决方案4】:

    因为你应该取消选中项目下的“影子构建”。并检查项目的路径。并确保 .css 文件位于项目文件夹中

    【讨论】:

      猜你喜欢
      • 2010-09-22
      • 1970-01-01
      • 2016-05-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-08
      • 1970-01-01
      相关资源
      最近更新 更多