Проблема с qmessagebox, не может изменить свою позицию - PullRequest
0 голосов
/ 11 февраля 2012

У меня есть это

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 ]

1 голос
/ 13 февраля 2012

Я решил использовать 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();
}
0 голосов
/ 11 февраля 2012

A QMessageBox создается с флагом окна Qt::Dialog (и косвенно, Qt::Window). Это означает, что оно будет рассматриваться как системное окно, даже если для него назначен родительский элемент. Когда вы наберете move(), он будет расположен в координатах рабочего стола.

Когда вы перемещаете окно сообщения в приведенном выше коде, вы указываете, чтобы оно отображалось в координатах рабочего стола, равных половине ширины и высоты размера основного окна приложения, смещенного относительно исходного положения (верхний левый угол рабочего стола).

Если главное окно вашего приложения имеет размер 400x200, то ваше окно сообщения будет отображаться с координатами рабочего стола 200 100 независимо от того, где находится главное окно приложения.

Если вы сделаете окно своего приложения полноэкранным, а затем отобразите окно сообщения, окно сообщения должно появиться (примерно) в центре экрана вашего рабочего стола. Я говорю грубо, потому что вы указываете позицию левого верхнего угла окна сообщения, а не то, где центр окна сообщения будет казаться.

Если вы хотите, чтобы окно сообщения всегда отображалось в центре экрана, вам нужно использовать информацию, предоставленную QDesktopWidget, чтобы определить, какими должны быть правильные координаты экрана.

...