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