2010-10-05 61 views
1

我使用QCSS样式表QT皮肤从QT资源系统映像几个按钮:检测在QT样式表缺少资源

QFrame#DialogButtonTitle_SaveAsNew 
{ 
    background-image: url(images:DialogButtonTitle_SaveAsNew.png); 
} 

这个伟大的工程,但我真的很想写一个警告我们记录如果从CSS引用的图像文件无法找到(并且按钮因此是裸露的)。任何方式来捕捉这样的错误?

回答

2

基于@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; 
}; 
+1

很酷。这是一个聪明的伎俩。 – andref 2012-07-10 13:17:02

+0

对不起,我为什么需要'm_lookUpInProgress'?是否需要保护'QFileInfo'访问? – nonsensickle 2015-03-30 03:19:46

+0

否则你会得到一个无限递归...... – 2015-03-30 13:07:41

1

当这样的事情发生时(虽然我不确定),Qt可能会调用其中一个消息函数。如果是这样,您可以安装消息处理函数并将一些或全部消息附加到日志文件中。在documentation for qInstallMsgHandler中有一些关于这样做的信息。

+1

我不知道...还有已经到位,打印到一个默认的处理程序标准输出。如果没有消息出现在控制台上,Qt可能不会写入它开始。 – andref 2010-10-06 18:50:52

+0

是的,消息处理程序在这种特殊情况下不起作用。 – 2010-10-07 08:56:14

2

我相信你能做到这样的:

还没有测试,但我认为它应该工作。代码:

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处理。

+0

谢谢!好的解决方案会给它一个旋转! – 2010-10-07 08:57:29