我在其他应用程序中看到了这一点,即使外观如此轻微,但效果却是高对比度 -> 更好的可读性。
例如,Qt Designer 中左侧的选项卡,或 Adobe Photoshop 中顶部的选项卡:文本有某种阴影,只有 1 个像素以对比色围绕文本。
有没有一种简单的方法可以用 Qt 做到这一点?还是更复杂的?
谢谢你。
我在其他应用程序中看到了这一点,即使外观如此轻微,但效果却是高对比度 -> 更好的可读性。
例如,Qt Designer 中左侧的选项卡,或 Adobe Photoshop 中顶部的选项卡:文本有某种阴影,只有 1 个像素以对比色围绕文本。
有没有一种简单的方法可以用 Qt 做到这一点?还是更复杂的?
谢谢你。
有几种方法可以实现这种效果,但从概念上讲,您需要将其视为具有轻微偏移的两个文本层。
我以前通过重新实现 QWidget 的 paintEvent() 方法并自己绘制文本层来完成此操作。或者您可以重新实现自定义 QStyle 的 drawItemText() 方法。但基本上就是这样做的。
这是我使用 Qt5 在所有按钮上进行文本阴影的方式。我不确定 Qt4 是否可以做到这一点。
class MyProxyStyle : public QProxyStyle
{
public:
void drawItemText(QPainter *painter, const QRect &rect, int flags, const QPalette &pal, bool enabled, const QString &text, QPalette::ColorRole textRole /* = QPalette::NoRole */) const
{
if (textRole == QPalette::ButtonText && dynamic_cast<QAbstractButton*>(painter->device()))
{
QPalette palShadow(pal);
palShadow.setColor(QPalette::ButtonText, QColor(0, 0, 0, 100));
QProxyStyle::drawItemText(painter, rect.adjusted(1, 1, 1, 1), flags, palShadow, enabled, text, textRole);
}
QProxyStyle::drawItemText(painter, rect, flags, pal, enabled, text, textRole);
}
};
...在 main() 的某个地方
QApplication a;
a.setStyle(new MyProxyStyle);
如果您删除 QAbstractButton dynamic_cast,菜单标题也将被遮蔽,这并不总是可取的。