我有这个
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,但它不起作用。关于这个的任何想法?
答案 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
提供的信息来确定正确的屏幕坐标应该是什么。