我使用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