もっと大きくしたい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のサイズを「手動」で設定する方法について何か考えはありますか?ありがとう。
ラベルの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());
しかし、これは誰にとってもうまくいくようには見えません。
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();
次のように、QMessageBox
をサブクラス化し、サイズ変更イベントハンドラーを再実装できます。
void MyMessageBox::resizeEvent(QResizeEvent *Event)
{
QMessageBox::resizeEvent(Event);
this->setFixedWidth(myFixedWidth);
this->setFixedHeight(myFixedHeight);
}
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のハード番号を状況に合わせて調整します。これよりも簡単だと思っていましたが、少なくともこれでうまくいきます。