Qt5.5.1版本中QString().arg()和qss在处理路径及文件名需要注意的地方

时间:2022-07-22
本文章向大家介绍Qt5.5.1版本中QString().arg()和qss在处理路径及文件名需要注意的地方,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
一、问题

在工作中的时候,需要做一个带有图片的按钮,在加载图片的时候,出现加载不上的问题

二、使用测试文件复原问题场景

文件名称:"金果园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);

输出结果:

test.png

诶!有没有发现问题,怎么跟期望不一样呢,文件名字的地方,在原始路径下是个什么字符呢? 是一个“%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的时候解析失败。