作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我需要扩展 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/
我是一名优秀的程序员,十分优秀!