QMessageBox中的等宽详细文本

时间:2014-03-19 22:33:55

标签: qt subclassing qmessagebox

我一直在使用QMessageBox来显示统计测试的结果。这很好,因为我可以将摘要结果放在信息性文本中,然后将详细文本中的完整结果放入其中。问题是,完整的结果是一个表格,所以我希望它是等宽的,以使它看起来正确,QMessageBox在详细的文本区域中不使用等宽字体。

因此,我正在查看子类化QMessageBox或子类化QDialog以创建看起来像QMessageBox但在详细文本区域中使用等宽字体的内容。我此刻有点生疏,并且很难搞清楚哪个是更好的选择。我可以继承QMessageBox,只需添加我自己的QTextEdit和我自己的"显示详细的文字"按钮,并保持QMessageBox详细的文本区域和按钮隐藏?或者有更简单的方法吗?

4 个答案:

答案 0 :(得分:3)

您可以在QMessageBox的字段中使用html文本,这是最简单的方法。作为提示,请尝试

 <pre>Test</pre>

在你的QString中。

但是,消息框的任何其他自定义都可能意味着一个子类。

答案 1 :(得分:1)

我没有找到比这更好的事情:

setStyleSheet("QTextEdit { font-family: monospace; }");

有点hacky因为(1)它使用样式表,这可能与你的小部件样式的方式冲突,(2)它依赖于详细文本在QTextEdit中的事实,并且是唯一的这样的元素,API没有正式确保。但它的确有效。 :d

答案 2 :(得分:1)

这是一个基于SQLAlchemy IN clause的答案的有效示例:

session.query(MyUserClass)
       .filter(MyUserClass.id.in_(SOME_LIST)).all()

答案 3 :(得分:0)

您可以使用此 hack 在 QMessageBox 的 detailText 中使用 html 文本:

QString html_formatted_text;
QMessageBox mb;
mb.setDetailedText(html_formatted_text);
// Find detailed text widget
auto te = mb.findChild<QTextEdit*>();
if (te) {
    te->setHtml(mb.detailedText());
}
mb.exec();