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

我在移动它之前使用 show() 解决了它。这是代码:

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

AQMessageBox是用窗口标志创建的Qt::Dialog(间接地,Qt::Window)。这意味着即使分配了父级,它也会被视为系统窗口。当您调用move()它时,它将定位在桌面坐标中。

当您在上面的代码中移动消息框时,您是在告诉它出现在桌面坐标处,该坐标等于从原点(桌面左上角)偏移的主应用程序窗口大小的宽度和高度的一半。

如果您的主应用程序窗口大小为 400x200,那么无论您的主应用程序窗口位于何处,您的消息框都将出现在桌面坐标 200,100 处。

如果您将应用程序窗口设为全屏然后显示消息框,则消息框应该(大致)出现在桌面显示的中心。我说的粗略是因为您指定的是消息框左上角的位置,而不是消息框中心的位置。

如果您希望消息框始终出现在屏幕的中心,那么您需要使用 提供的信息QDesktopWidget来确定正确的屏幕坐标应该是什么。

于 2012-02-10T22:40:52.697 回答