首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Qt5.5.1版本中QString().arg()和qss在处理路径及文件名需要注意的地方

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

作者头像
Sky_Mao
发布2020-07-24 10:09:48
1K0
发布2020-07-24 10:09:48
举报
一、问题

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

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

文件名称:"金果园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的时候解析失败。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、问题
  • 二、使用测试文件复原问题场景
  • 三、qss使用的时候需要注意的地方
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档