Как изменить размер QMessageBox?
У меня есть QMessageBox
, который я бы хотел, чтобы он был больше. Это простой QMessageBox
с двумя стандартными кнопками, Ok и Cancel. Проблема в том, что она очень мала для моих приложений. Код выглядит следующим образом:
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;}
Я попробовал несколько способов увеличить размер:
msg.setSizePolicy(QSizePolicy::Expanding,QSizePolicy::Expanding);
msg.setSizePolicy(QSizePolicy::Maximum,QSizePolicy::Maximum);
msg.setFixedHeight(600);
msg.setFixedWidth(600);
Я даже очистил и перестроил, и он компилирует все, но ничего не вступает в силу...
Есть ли у вас какая-либо идея о том, как установить размер QMessageBox "вручную"? Спасибо.
Ответы
Ответ 1
Вы можете отредактировать css метки:
msg.setStyleSheet("QLabel{min-width: 700px;}");
Вы также можете отредактировать css кнопок для добавления поля или увеличения размера.
Например:
msg.setStyleSheet("QLabel{min-width:500 px; font-size: 24px;} QPushButton{ width:250px; font-size: 18px; }");
Существует также трюк:
QSpacerItem* horizontalSpacer = new QSpacerItem(800, 0, QSizePolicy::Minimum, QSizePolicy::Expanding);
QGridLayout* layout = (QGridLayout*)msg.layout();
layout->addItem(horizontalSpacer, layout->rowCount(), 0, 1, layout->columnCount());
Но это не работает для всех.
Ответ 2
Ответ 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();
Ответ 3
Вы можете QMessageBox
подкласс QMessageBox
и переопределить обработчик события изменения размера следующим образом:
void MyMessageBox::resizeEvent(QResizeEvent *Event)
{
QMessageBox::resizeEvent(Event);
this->setFixedWidth(myFixedWidth);
this->setFixedHeight(myFixedHeight);
}
Ответ 4
Я хотел, чтобы ширина моего QMessageBox адаптировалась пропорционально длине текстового содержимого с определенным количеством буфера, чтобы избежать переноса строк. Изучив многочисленные форумы и темы, в том числе и этот, я придумал:
int x_offset = (2.0 * MainWindow::geometry().x());
int y_offset = (0.5 * MainWindow::geometry().y());
msgBox.setText(vers_msg.data());
QSpacerItem* horizontalSpacer = new QSpacerItem
(8 * vers_msg.size(), 0,
QSizePolicy::Minimum, QSizePolicy::Expanding);
QGridLayout* layout = (QGridLayout*)msgBox.layout();
layout->addItem(horizontalSpacer, layout->rowCount(),
0, 1, layout->columnCount());
msgBox.setGeometry(
MainWindow::geometry().x() + x_offset,
MainWindow::geometry().y() + y_offset,
msgBox.geometry().width(),
msgBox.geometry().height());
Настройте жесткие числа в x_offset, y_offset и horizontalSpacer в соответствии с вашей ситуацией. Я надеялся, что это будет легче, чем это, но по крайней мере это работает.