qmessagebox问题,无法改变其立场

时间:2012-02-10 20:33:19

标签: android c++ qt qmessagebox

我有这个

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,但它不起作用。关于这个的任何想法?

2 个答案:

答案 0 :(得分: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();
}

答案 1 :(得分:0)

使用窗口标记QMessageBox(以及间接Qt::Dialog)创建Qt::Window。这意味着即使它已分配父级,它也将被视为系统窗口。当您在其上调用move()时,它将位于桌面坐标中。

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

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

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

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