美文网首页
Qt5.5.1版本中QString().arg()和qss在处理

Qt5.5.1版本中QString().arg()和qss在处理

作者: Sky_Mao | 来源:发表于2018-12-05 18:35 被阅读0次
    一、问题

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

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

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

    相关文章

      网友评论

          本文标题:Qt5.5.1版本中QString().arg()和qss在处理

          本文链接:https://www.haomeiwen.com/subject/dlgicqtx.html