【问题标题】:Qt stylesheet and QString::arg()Qt 样式表和 QString::arg()
【发布时间】:2017-07-05 08:03:50
【问题描述】:

为了让样式表在 DPI 设置方面保持动态,我想从代码中设置它的某些部分。

这行得通:

my_label->setStyleSheet( QString( "font-size: 30px;" ) );

然而,这不是:

my_label->setStyleSheet( QString( "font-size: %1px;" ).arg( 30 ) );

谁能启发我,这是为什么?运行 Qt 5.7。

【问题讨论】:

  • 你从QString 部分得到了什么?它对我来说很好用:qDebug() << QString{ "font-size: %1px;" }.arg( 30 );.
  • 是的,qDebug() 显示了正确的输出。有点莫名其妙。
  • 无法重现(Qt5.9,Linux)。如果您先将QString 构造为QString ss = QString("font-size: %1px;").arg(30),然后再构造my_label->setStyleSheet(ss),会发生什么?
  • 通用汽车问题依然存在。
  • 如果将QString 创建为显式验证不起作用,那么- 至少对我而言- 这似乎与qDebug 起作用的事实完全不一致。请编辑您的问题以包含可用于重现问题的minimal reproducible example

标签: qt stylesheet qstring


【解决方案1】:

问题是两件事的结合:

  1. 我需要先将值转换为字符串
  2. 在运行时传递给 arg() 的实际值有小数位,“30”只是为了测试

虽然我确实尝试了不同的组合(整数值 (30),首先转换为 QString),但我没有尝试使用整数值并将其一起转换为 QString。 所以每个人都说得对。感谢您的耐心等待。

【讨论】:

  • 这就是你没有发布重现问题的测试用例的结果。以后不要这样做,对自己有很大帮助。
【解决方案2】:

将数字转换为字符串,QString::number

my_label->setStyleSheet(QString("QLabel{font-size: %1 px;}").arg(QString::number(30));

或者尝试使用QFont,为此使用这个通用函数:

void updateFontSize(QLabel* label, int fontSize) {
    QFont font = label->font();
    if (font.pointSize() != fontSize) {
        font.setPointSize(fontSize);
        label->setFont(font);
    }
}

【讨论】:

  • 不幸的是,结果相同。
  • @iknownthing 用 C++ API 试试,我已经更新了响应。
  • @MohammedB.B.:使用 QString::number 会产生开销,因为为此已经存在 intQString::arg() 重载。
  • @Azeem 我相信这不会是一个大问题;将字符串转换为 int 的函数的性能实际上不应成为任何程序中的决定因素。
  • @Azeem 不会因为您调用函数而进行上下文切换。如果单个函数调用对您的程序造成的伤害足以让您担心,那么您可能会遇到更大的问题。
猜你喜欢
  • 1970-01-01
  • 2013-05-20
  • 2013-12-20
  • 1970-01-01
  • 2017-05-28
  • 2012-06-04
  • 1970-01-01
  • 2011-11-30
  • 1970-01-01
相关资源
最近更新 更多