gpt4 book ai didi

c++ - 扩展QMessageBox类时如何访问QMessageBoxPrivate中的label变量?

转载 作者:行者123 更新时间:2023-11-28 07:16:22 26 4
gpt4 key购买 nike

我需要扩展 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();

关于c++ - 扩展QMessageBox类时如何访问QMessageBoxPrivate中的label变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20184624/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com