0

私はこれを持っています

int MainWindow::messageBox( QString button, QMessageBox::ButtonRole buttons, QString info, QMessageBox::Icon icon )
{
    QFont f;

    f.setPointSize(6);

    QMessageBox *message = new QMessageBox(this);
    message->setWindowModality(Qt::WindowModal);
    message->setFont(f);
    message->setText(info);
    message->addButton( button, buttons );
    message->setWindowTitle("MainWindow");
    message->setIcon(icon);
    message->move( this->width() / 2, this->height() / 2 );

    return message->exec();
}

しかし、qmessagebox を画面の中央に移動させることはできません。setGeometry も使用してみましたが、機能しません。これに関するアイデアはありますか?

4

2 に答える 2

1

I solved using show() before moving it. This is the code:

int MainWindow::messageBox( QString button, QMessageBox::ButtonRole buttons, QString info, QMessageBox::Icon icon )
{
    QFont f;
    QMessageBox *message = new QMessageBox(this);
    QDesktopWidget *win = new QDesktopWidget();

    f.setPointSize(6);

    message->setWindowModality(Qt::WindowModal);
    message->setFont(f);
    message->setText(info);
    message->addButton( button, buttons );
    message->setWindowTitle("MainWindow");
    message->setIcon(icon);
    message->show();
    message->move( win->width() / 2 - message->width() / 2, win->height() / 2 - message->height() / 2 );

    return message->exec();
}
于 2012-02-13T17:49:58.897 に答える
0

QMessageBox、ウィンドウ フラグQt::Dialog(および間接的にQt::Window) を使用して作成されます。これは、親が割り当てられていても、システム ウィンドウのように扱われることを意味します。呼び出すmove()と、デスクトップ座標に配置されます。

上記のコードでメッセージ ボックスを移動すると、原点 (デスクトップの左上隅) からオフセットされたメイン アプリケーション ウィンドウ サイズの半分の幅と高さに等しいデスクトップ座標に表示されるように指示されます。

メイン アプリケーション ウィンドウのサイズが 400x200 の場合、メイン アプリケーション ウィンドウの場所に関係なく、メッセージ ボックスはデスクトップ座標 200,100 に表示されます。

アプリケーション ウィンドウを全画面表示にしてからメッセージ ボックスを表示すると、メッセージ ボックスはデスクトップ ディスプレイのほぼ中央に表示されます。メッセージ ボックスの中心が表示される場所ではなく、メッセージ ボックスの左上隅の位置を指定しているため、大まかに言います。

メッセージ ボックスを常に画面の中央に表示する場合は、 によって提供される情報を使用しQDesktopWidgetて、正しい画面座標を決定する必要があります。

于 2012-02-10T22:40:52.697 に答える