扩展QMessageBox类时,如何访问QMessageBoxPrivate中的标签变量



我需要扩展QMessageBox,以将标签的QTextInteractionFlags设置为Qt::TextSelectableByMouse|Qt::TextSelectableByKeyboard。

我检查了qmessagebox.cpp 的src代码

void QMessageBox::setText(const QString &text)
{
    Q_D(QMessageBox);
    d->label->setText(text);
    d->label->setWordWrap(d->label->textFormat() == Qt::RichText
        || (d->label->textFormat() == Qt::AutoText && Qt::mightBeRichText(text)));
    d->updateSize();
}

我需要一个这样的代码:

void QMessageBox::setTextInteractionFlags ( Qt::TextInteractionFlags flags )
{
    Q_D(QMessageBox);
    d->label->textInteractionFlags(flags);
}

那么,我如何扩展QMessageBox并在QMessageBox上获得d指针呢?似乎我需要访问QMessageBoxPrivate类。

子类QStyle和重新实现styleHint方法之一。

#include <QCommonStyle>
class MyStyle : public QCommonStyle
{
public:
    explicit MyStyle() {}
    int styleHint(StyleHint sh, const QStyleOption *opt, const QWidget *widget, QStyleHintReturn *hret) const
    {
        if (SH_MessageBox_TextInteractionFlags == sh)
        {
           return Qt::TextSelectableByMouse | Qt::TextSelectableByKeyboard;
        }
        return QCommonStyle::styleHint(sh, opt, widget, hret);
    }
};

将您的风格应用于消息框。

QMessageBox msgBox;
msgBox.setText("This is something text.");
msgBox.setStandardButtons(QMessageBox::Ok | QMessageBox::Cancel);
msgBox.setStyle(new MyStyle);
int ret = msgBox.exec();

相关内容

  • 没有找到相关文章

最新更新