【问题标题】:Changing the Color of QLineEdit's Placeholder Text更改 QLineEdit 占位符文本的颜色
【发布时间】:2013-10-28 23:31:21
【问题描述】:

我正在使用 Qt 4.8 编写一个应用程序,并通过 CSS 来利用样式。在设置 QLineEdit 样式时,有selection-background-color 等属性,是否有一个属性可以让我更改占位符文本的颜色?

如果没有,还有其他方法可以改变吗?

【问题讨论】:

  • hm,我不知道任何具体的内容,但我会根据您的需要简单地为文本着色,并将QLineEdit::textChanged( const QString& ) 信号连接到一个函数,检查文本是否仍然是占位符,如果不是-> 其他颜色/不同样式表

标签: c++ css qt


【解决方案1】:

占位符的颜色是 alpha 设置为 50% 的文本颜色。 至少在 4.7 中,这是硬编码的,因此无法随样式更改。

由于决定是在 QLineEdit::paintEvent 中实现的,因此您可以在派生类中覆盖 paintEvent 并将颜色更改为适合您的颜色。

但是你为什么想要不同的颜色呢?如果您将其更改为红色或类似的颜色,您可能会激怒无法区分占位符和“真实”文本的用户。

【讨论】:

  • 我不想将其更改为红色,但是由于我的应用程序支持多种样式,因此占位符文本在某些配置下看起来并不理想。感谢您的洞察力!
  • 是的,不幸的是,文本只是行编辑文本的 50% alpha,所以如果您在 CSS 中设置行编辑文本的颜色,占位符文本也应该改变
  • 这里 if 4.7 绘画占位符的来源: if (d->control->text().isEmpty()) { if (!hasFocus() && !d->placeholderText.isEmpty()) { QColor col = pal.text().color(); col.setAlpha(128); QPen oldpen = p.pen(); p.setPen(col); lineRect.adjust(minLB, 0, 0, 0); QString elidedText = fm.elidedText(d->placeholderText, Qt::ElideRight, lineRect.width()); p.drawText(lineRect, va, elidedText); p.setPen(旧笔);返回; } }
【解决方案2】:

也许您可以将调色板更改连接到信号 textChanged():当行编辑为空时更改文本颜色。

【讨论】:

    猜你喜欢
    • 2015-01-29
    • 2017-05-18
    • 2013-02-04
    • 2010-11-23
    • 1970-01-01
    • 2017-10-03
    • 2019-12-09
    • 2014-11-22
    相关资源
    最近更新 更多