我有这个
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,但它不起作用。对此有什么想法吗?
在移动它之前,我使用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();
}
使用窗口标志Qt::Dialog
(以及间接的Qt::Window
)创建QMessageBox
。这意味着它将被视为一个系统窗口,即使它已经分配了一个父窗口。当您在其上调用move()
时,它将位于桌面坐标中。
当你在上面的代码中移动消息框时,你会告诉它显示在桌面坐标上,该坐标等于主应用程序窗口大小从原点(桌面左上角)偏移的宽度和高度的一半。
如果您的主应用程序窗口的大小为400x200,那么无论您的主要应用程序窗口位于何处,您的消息框都将显示在桌面坐标200100处。
如果将应用程序窗口设置为全屏,然后显示消息框,则消息框应(大致)显示在桌面显示的中心。我这么说大概是因为你指定的是消息框左上角的位置,而不是消息框的中心
如果您希望消息框始终显示在屏幕中心,则需要使用QDesktopWidget
提供的信息来确定正确的屏幕坐标。