【发布时间】:2014-04-11 15:15:35
【问题描述】:
我想创建一个QMessageBox::critical,它会根据内容(消息文本)的大小自动调整其大小。我该怎么做?
这是我想在 QMessageBox 上显示的消息
std::wstring tmpStrEx;
QDomNode tmpNodeParent = node.parentNode();
while(!tmpNodeParent.isNull() && tmpNodeParent.nodeName().toStdWString() != L"root"){
std::wstring tmpStrTmp;
tmpStrTmp = L"<"
+ tmpNodeParent.nodeName().toStdWString()
+ L" nm=\""
+ tmpNodeParent.toElement().attribute(QS(_T("nm")), QS(_T("undef")) ).toStdWString()
+ L"> ";
}
QString mex = "Error while reading vector.<br/><br/>Please check in:<br/><br/> " + tmpStrTmp ;
tmpStrTmp 可以类似于 <vct nm="name"> <vcx nm="xyz">
我尝试通过这些方式构建 QMessageBox:
先来个简单的:
QMessageBox::critical(this, "Error", mex);
这显示一半消息没有 tmpStrTmp 中的内容,如下所示:
读取向量时出错。
请签到:
我认为tmpStrTmp 是问题所在,但如果我只将tmpStrTmp 放在QMessageBox 中,它会显示其内容。所以,我以为是空间的问题,我尝试了这两种方法:
1.
QMessageBox msgBox;
QSpacerItem* spacer = new QSpacerItem(500, 500, QSizePolicy::Minimum, QSizePolicy::Expanding);
msgBox.setTextFormat(Qt::RichText);
msgBox.setText( mex );
QGridLayout* layout = (QGridLayout*)msgBox.layout();
layout->addItem(spacer, layout->rowCount(), 0, 1, layout->columnCount());
msgBox.exec();
2.
QMessageBox *box = new QMessageBox::QMessageBox(QMessageBox::critical, "Error", mex);
QGridLayout *layout = qobject_cast<QGridLayout *>(box->layout());
if (layout) {
QTextEdit *edit = new QTextEdit(mex);
edit->setReadOnly(true);
layout->addWidget(edit, 0, 1);
}
box->exec();
delete box;
但没有成功...有什么帮助吗?谢谢
【问题讨论】:
-
你试过了吗?
-
文本根据长度分成多行。所以你不希望文本在多行并且消息框水平增长?
-
这个问题似乎是题外话,因为没有显示任何尝试。它也可能因不明原因而关闭。
-
这里可能有一些相关的黑客攻击:qtcentre.org/threads/22298-QMessageBox-Controlling-the-width 但你需要更具体一点。消息框自动调整大小。你想换行吗?你的文字有换行吗?请包含您尝试显示的内容以及您所看到内容的屏幕截图以及您想要看到的内容的描述。
标签: qt qmessagebox