Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Qt 使QMessageBox大小适应其文本大小_Qt_Qmessagebox - Fatal编程技术网

Qt 使QMessageBox大小适应其文本大小

Qt 使QMessageBox大小适应其文本大小,qt,qmessagebox,Qt,Qmessagebox,我想创建一个QMessageBox::critical,它将根据内容(消息文本)的大小自动调整其大小。我怎么做 这是我想在QMessageBox上显示的消息 std::wstring tmpStrEx; QDomNode tmpNodeParent = node.parentNode(); while(!tmpNodeParent.isNull() && tmpNodeParent.nodeName().toStdWString() != L"root"){ std::wstr

我想创建一个
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 ;
这显示了TMPSTRMP中没有内容的一半消息,如下所示:

读取向量时出错

请登记:

我以为问题出在
tmpStrTmp
上,但如果我只在QMessageBox中放入
tmpStrTmp
,它就会显示其内容。因此,我认为这是一个空间问题,我尝试了以下两种方法:

一,

二,

QMessageBox*box=新的QMessageBox::QMessageBox(QMessageBox::critical,“Error”,mex);
QGridLayout*layout=qobject_cast(框->布局());
如果(布局){
QTextEdit*edit=新的QTextEdit(mex);
编辑->设置只读(真);
布局->添加小部件(编辑,0,1);
}
box->exec();
删除框;

但是没有成功…有什么帮助吗?谢谢

如果您不想让QMessageBox简单地用文本加宽,并在某个时候换行,您应该创建QMessageBox的实例并将其设置为固定宽度(
QWidget::setFixedWidth()

另一个选项是传入一个包含新行(
\n
)的文本字符串,它可以很好地处理它

此外,如果您使用的是实例,您可以告诉它您正在使用RichText,并传入html标记的子集
QMessageBox::setTextFormat(Qt::RichText)
,甚至确保在第一个换行符之前使用有效的html标记


希望有帮助

QMessageBox是一个网格。我不知道如何使QMessageBox大小适应其文本大小,但如果您知道messagebox中将显示什么,您可以通过以下方式将其设置为最小(实际上是固定的)大小:-

QMessageBox messageBox;
QSpacerItem* horizontalSpacer = new QSpacerItem(500, 0, QSizePolicy::Minimum, QSizePolicy::Expanding);
messageBox.setText( "Put text here" );
QGridLayout* layout = (QGridLayout*)messageBox.layout();
layout->addItem(horizontalSpacer, layout->rowCount(), 0, 1, layout->columnCount());
messageBox.exec();

你试过什么了吗?文本根据其长度分成多行。因此,您不希望文本在多行中且messagebox水平增长?此问题似乎与主题无关,因为没有显示任何尝试。它也可能因为不清楚的原因而关闭。这里可能有一些相关的黑客:但你需要更具体一点。消息框自动调整大小。你是想把单词包装起来吗?你的文本有换行符吗?请包括您试图显示的内容,以及您正在看到的内容的屏幕截图和您希望看到的内容的描述。QMessageBox::critical默认情况下会根据消息文本的长度将其拆分为多行。是的,但有时您最终会遇到不太吸引人的细长文本框。如果我担心他们的长相,我最终让他们看起来更接近4:3的比例。
 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();
 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;
QMessageBox messageBox;
QSpacerItem* horizontalSpacer = new QSpacerItem(500, 0, QSizePolicy::Minimum, QSizePolicy::Expanding);
messageBox.setText( "Put text here" );
QGridLayout* layout = (QGridLayout*)messageBox.layout();
layout->addItem(horizontalSpacer, layout->rowCount(), 0, 1, layout->columnCount());
messageBox.exec();