【问题标题】:How to draw a QStaticText with a mnemonic underline in Qt?如何在 Qt 中绘制带有助记​​符下划线的 QStaticText?
【发布时间】:2022-01-10 01:24:20
【问题描述】:

对于自定义小部件,有些选项卡禁止使用ALT + <C> 快捷方式访问,其中<C> 可以是任何键盘字符键。在 Qt 中,这称为Mnemonic

对于这个快捷方式,需要在标签中将该字母加下划线。

我可以看到QPainter::drawText 有一个标志参数,可以用Qt::TextShowMnemonic 提供,但我想在使用QStaticText 时使用它以提高性能。 QStaticText 允许富文本,但似乎不支持下划线,或者我无法使其工作。

#include <QApplication>
#include <QDebug>
#include <QStaticText>
#include <QPainter>
#include <QPaintEvent>
#include <QWidget>


class TestWidget: public QWidget
{
    Q_OBJECT
public:
    explicit TestWidget( QWidget* parent=nullptr):QWidget(parent){}

    auto paintEvent(QPaintEvent *event) -> void override
    {
        QPainter p(this);

        QStaticText staticText; // this is not how it should be used, but for the example...
        staticText.setTextFormat(Qt::TextFormat::RichText);
        staticText.setText("<u>F</u>ile"); //What happens with Underline?
        p.drawStaticText(QPoint(50,50), staticText);

        p.drawText(QRect(50, 80, 100, 100), Qt::TextShowMnemonic, "&File"); // Ok, this works, but no static-text
    }
};
#include "main.moc"

auto main (int argn, char* args[])-> int
{
    QApplication app(argn, args);
    qDebug() << QT_VERSION_STR;

    TestWidget w;
    w.resize(200,200);
    w.show();

    return app.exec();
}

结果:

问题是:

如何使用QStaticText制作下划线或&助记符?

.

【问题讨论】:

  • staticText.setText("&lt;u&gt;F&lt;/u&gt;ile"); 是真的渲染标签还是只是忽略它们?
  • 只是忽略了它们。 (我添加了一张图片)
  • 这个好像有QT-BUG,快10岁了。
  • 谢谢@SebastianDietrich,我现在明白了。我想除了使用drawText函数之外别无他法。
  • 注意:如果您想将此作为答案,我会接受/赞成。 (我知道反正不是什么大奖励)

标签: c++ qt qpainter


【解决方案1】:

这似乎有一个QT-BUG,差不多有 10 年的历史了(它创建于 2012 年)。

QStaticText 不支持 text-decoration css 属性。
字体粗细、颜色、字体样式等属性确实有效果,但文本装饰没有效果。请参阅附加的示例程序,其中 HTML 字符串使用元素来为字符串的一部分加下划线。使用 ... 似乎没有任何效果。此外,仅使用普通下划线标签时,它不起作用。

QStaticText 的文档中也存在关于此问题的冲突,指出“为了更加方便,可以使用 QTextDocument 支持的 HTML 子集对文本应用格式设置。”。但是在文档的下一章中说“QStaticText 只能表示文本,因此只有改变文本布局或外观的 HTML 标签才会受到尊重。例如,将图像添加到输入 HTML 将导致图像作为布局的一部分,影响文本字形的位置,但不会显示。结果将是输出中图像大小的空白区域。同样,使用表格将导致文本以表格形式布局,但不会绘制边框。”

QTextDocument 支持的 HTML 子集似乎并不完全适用于 QStaticText 格式。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-23
    • 1970-01-01
    • 1970-01-01
    • 2011-07-15
    相关资源
    最近更新 更多