如何调整QMessageBox的大小?

DYa*_*ngu 13 c++ qt qmessagebox

我有一个QMessageBox我希望它更大.这是一个简单QMessageBox的两个标准按钮,确定和取消.问题是它对于我的应用程序而言非常小.代码显示如下:

QMessageBox msg;
msg.setText("Whatever");
msg.setStandardButtons(QMessageBox::Ok | QMessageBox::Cancel);
msg.setSizePolicy(QSizePolicy::Expanding,QSizePolicy::Expanding);

int ret = msg.exec();
switch (ret) {
  case QMessageBox::Ok:
      ui->textEdit->clear();
      break;
  case QMessageBox::Cancel:
      break;}
Run Code Online (Sandbox Code Playgroud)

我尝试了几种方法来增加大小:

msg.setSizePolicy(QSizePolicy::Expanding,QSizePolicy::Expanding);

msg.setSizePolicy(QSizePolicy::Maximum,QSizePolicy::Maximum);

msg.setFixedHeight(600);
msg.setFixedWidth(600);
Run Code Online (Sandbox Code Playgroud)

我甚至清理并重建,它编译了一切,但没有任何生效...

您对如何"手动"设置QMessageBox大小有任何想法吗?谢谢.

coy*_*508 25

您可以编辑标签的CSS:

msg.setStyleSheet("QLabel{min-width: 700px;}");
Run Code Online (Sandbox Code Playgroud)

您可以类似地编辑按钮的CSS以添加边距或使其更大.

例如:

msg.setStyleSheet("QLabel{min-width:500 px; font-size: 24px;} QPushButton{ width:250px; font-size: 18px; }");
Run Code Online (Sandbox Code Playgroud)

提到了一个技巧:

QSpacerItem* horizontalSpacer = new QSpacerItem(800, 0, QSizePolicy::Minimum, QSizePolicy::Expanding);
QGridLayout* layout = (QGridLayout*)msg.layout();
layout->addItem(horizontalSpacer, layout->rowCount(), 0, 1, layout->columnCount());
Run Code Online (Sandbox Code Playgroud)

但这似乎并不适用于所有人.


Spe*_*cer 10

coyotte508 的答案导致我的布局严重偏离中心,并且在不同的宽度下它被切断。在进一步搜索中,我发现这个线程解释了更好的解决方案。

本质上,消息框的布局是一个网格,因此您可以向其添加 SpacerItem 来控制宽度。以下是该链接中的 C++ 代码示例:

QMessageBox msgBox;
QSpacerItem* horizontalSpacer = new QSpacerItem(500, 0, QSizePolicy::Minimum, QSizePolicy::Expanding);
msgBox.setText( "SomText" );
QGridLayout* layout = (QGridLayout*)msgBox.layout();
layout->addItem(horizontalSpacer, layout->rowCount(), 0, 1, layout->columnCount());
msgBox.exec();
Run Code Online (Sandbox Code Playgroud)