如何在Qt中绘制带助记符下划线的QStaticText?

How to draw a QStaticText with a mnemonic underline in Qt?

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

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

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

#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();
}

结果:

问题是:

如何制作下划线或&mnemonic以配合QStaticText ?

.

这个好像有一个QT-BUG,快10年了(2012年创建的)

QStaticText doesn't support text-decoration css property.
Properties like font-weight, color, font-style do have an effect but the text-decoration does not. See the attached example program where is HTML string using a element to underline a part of the string. This doesn't seem to have any effect using .... Also when using just plain underline tags it doesn't work.

There is also a conflict in the documentation of QStaticText concerning this issue stating that "For extra convenience, it is possible to apply formatting to the text using the HTML subset supported by QTextDocument.". However in the next chapter of the documention is said that "QStaticText can only represent text, so only HTML tags which alter the layout or appearance of the text will be respected. Adding an image to the input HTML, for instance, will cause the image to be included as part of the layout, affecting the positions of the text glyphs, but it will not be displayed. The result will be an empty area the size of the image in the output. Similarly, using tables will cause the text to be laid out in table format, but the borders will not be drawn."

It seems that the HTML subset supported by QTextDocument is not entirely applicable to QStaticText formatting.