2010-10-05 67 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