一、问题
在工作中的时候,需要做一个带有图片的按钮,在加载图片的时候,出现加载不上的问题
二、使用测试文件复原问题场景
文件名称:"金果园1#(20180202182916)(20180202185154)_0.png"
文件路径:"D:/Build/bin/Win32/test+%1==/img"
路径和文件名称合并起来期望结果为:"D:/Build/bin/Win32/test+%1==/img/金果园1#(20180202182916)(20180202185154)_0.png"
那么使用QString()::arg()是否是这样的呢?写一段程序来测试一下
测试代码:
QString strPath = "D:/Build/bin/Win32/test+%1==/img";
QString strFile = QString::fromLocal8Bit("金果园1#(20180202182916)(20180202185154)_0.png");
//使用arg()转义
QString strFilePath = QString::fromLocal8Bit("合并后的路径为:%1%2").arg(strPath).arg(strFile);
QMessageBox::information(this, QString::fromLocal8Bit("测试输出"), strFilePath);
输出结果:
诶!有没有发现问题,怎么跟期望不一样呢,文件名字的地方,在原始路径下是个什么字符呢?
是一个“%1”字符
原因:
Qt .arg方法,在转义和拼接字符串的时候,会从前往后进行转义拼接,当转义过后的字符串中存在%1、%2这种字符,会认为是转义符,然后把后面的字符串
转义到此处,所以路径当中尽量不要携带这些字符,或者使用其他方式进行拼接和转义。
三、qss使用的时候需要注意的地方
问题代码:
QString sStyle = QString("QPushButton{border-image: url(%1);}").arg(sImagePath);
pImageButton->resize(pixmap.size());
pImageButton->setStyleSheet(sStyle);
pImageButton->show();
属于Qt的机制问题,QPushButton 的qss样式表中的url不能包含%字符,如果包含此字符
会导致设置style的时候解析失败。