web-dev-qa-db-ja.com

QMessageBoxのサイズを変更するにはどうすればよいですか?

もっと大きくしたいQMessageBoxがあります。これは、2つの標準ボタンOkおよび[キャンセル]を備えた単純な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;}

サイズを増やす方法をいくつか試しました。

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

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

msg.setFixedHeight(600);
msg.setFixedWidth(600);

私はクリアして再構築さえしました、そしてそれはすべてをコンパイルしますが、何も効果がありません...

QMessageBoxのサイズを「手動」で設定する方法について何か考えはありますか?ありがとう。

13
DYangu

ラベルの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());

しかし、これは誰にとってもうまくいくようには見えません。

25
coyotte508

coyotte508の回答により、レイアウトが中央からひどくずれ、幅が異なるとレイアウトが切り取られました。さらに検索したところ、 this スレッドが見つかりました。これは、より良い解決策を説明しています。

本質的にメッセージボックスのレイアウトはグリッドなので、それに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();
1
Spencer

次のように、QMessageBoxをサブクラス化し、サイズ変更イベントハンドラーを再実装できます。

void MyMessageBox::resizeEvent(QResizeEvent *Event)
{
    QMessageBox::resizeEvent(Event);
    this->setFixedWidth(myFixedWidth);
    this->setFixedHeight(myFixedHeight);
}
0
ephemerr

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、およびhorizo​​ntalSpacerのハード番号を状況に合わせて調整します。これよりも簡単だと思っていましたが、少なくともこれでうまくいきます。

0
Dave Sieving