我使用QCSS样式表QT皮肤从QT资源系统映像几个按钮:检测在QT样式表缺少资源
QFrame#DialogButtonTitle_SaveAsNew
{
background-image: url(images:DialogButtonTitle_SaveAsNew.png);
}
这个伟大的工程,但我真的很想写一个警告我们记录如果从CSS引用的图像文件无法找到(并且按钮因此是裸露的)。任何方式来捕捉这样的错误?
我使用QCSS样式表QT皮肤从QT资源系统映像几个按钮:检测在QT样式表缺少资源
QFrame#DialogButtonTitle_SaveAsNew
{
background-image: url(images:DialogButtonTitle_SaveAsNew.png);
}
这个伟大的工程,但我真的很想写一个警告我们记录如果从CSS引用的图像文件无法找到(并且按钮因此是裸露的)。任何方式来捕捉这样的错误?
基于@andref答案,我想出了这一点,这对我的作品(TM):
class LoggingEngineHandler : public QAbstractFileEngineHandler
{
public:
LoggingEngineHandler()
: QAbstractFileEngineHandler()
, m_lookUpInProgress(false)
, m_lookUpPaths(QRegExp("^(images|meshes|app|sounds):"))
{
// empty
}
QAbstractFileEngine* create(const QString &fileName) const override
{
if (!fileName.contains(m_lookUpPaths))
return 0;
if (m_lookUpInProgress)
return 0;
m_lookUpInProgress = true;
QFileInfo info = QFileInfo(fileName);
m_lookUpInProgress = false;
if (!info.exists())
{
assert(!Utilities::isRunByUser("designer"));
LOG_WARN("Required resource file does not exist: %1%", QUtil_s(fileName));
}
return 0;
}
protected:
mutable bool m_lookUpInProgress;
QRegExp m_lookUpPaths;
};
当这样的事情发生时(虽然我不确定),Qt可能会调用其中一个消息函数。如果是这样,您可以安装消息处理函数并将一些或全部消息附加到日志文件中。在documentation for qInstallMsgHandler
中有一些关于这样做的信息。
我不知道...还有已经到位,打印到一个默认的处理程序标准输出。如果没有消息出现在控制台上,Qt可能不会写入它开始。 – andref 2010-10-06 18:50:52
是的,消息处理程序在这种特殊情况下不起作用。 – 2010-10-07 08:56:14
我相信你能做到这样的:
QAbstractFileEngine::open()
方法。create()
应检查文件名以查看它是否正在从资源文件中读取。还没有测试,但我认为它应该工作。代码:
bool MyEngine::open(QIODevice::OpenMode mode)
{
bool r = QFSFileEngine::open(mode);
if (!r) {
qWarning() << "Failed to open" << fileName();
}
return r;
}
QAbstractFileEngine *MyEngineHandler::create(const QString &fileName) const
{
return fileName.startsWith("images:") ? new MyEngine(fileName) : 0;
}
编辑。
这是行不通的。资源文件系统“:”由名为QResourceFileEngine的私有文件引擎处理,而不是由QFSFileEngine处理。
谢谢!好的解决方案会给它一个旋转! – 2010-10-07 08:57:29
很酷。这是一个聪明的伎俩。 – andref 2012-07-10 13:17:02
对不起,我为什么需要'm_lookUpInProgress'?是否需要保护'QFileInfo'访问? – nonsensickle 2015-03-30 03:19:46
否则你会得到一个无限递归...... – 2015-03-30 13:07:41