多监视器屏幕上的应用程序窗口和中心位置

问题描述:

我有一个QMainWindow,它由另一个应用程序启动。多监视器屏幕上的应用程序窗口和中心位置

问题是,在多监视器设置中,启动我的QMainWindow的应用程序可能驻留在第三个屏幕上,但我的窗口将始终在第一个屏幕上启动。

我以下列方式工作围绕这个...

QDesktopWidget *m = new QDesktopWidget(); 
QPoint p= QCursor::pos(); 
int r= m->screenNumber(p); //get the screennumber where the mouse is 
QRect d=m->screenGeometry(r); 
QPoint l = d.center(); //not the correct solution 
mainWin->move(l); //move the window to that screen 
mainWin->show(); //launch 

现在,我该如何在屏幕中心推出这个窗口。 d.center()不是正确的方法,因为窗口的顶部将从中心点启动,所以它会被遮挡。

请注意。

也许尝试这样的事:

void MainWindow::CenterToScreen(QWidget* widget) { 
    if (!widget) 
    return; 
    QDesktopWidget* m = QApplication::desktop(); 
    QRect desk_rect = m->screenGeometry(m->screenNumber(QCursor::pos())); 
    int desk_x = desk_rect.width(); 
    int desk_y = desk_rect.height(); 
    int x = widget->width(); 
    int y = widget->height(); 
    widget->move(desk_x/2 - x/2 + desk_rect.left(), desk_y/2 - y/2 + desk_rect.top()); 
} 

与用法:

CenterToScreen(this); // or CenterToScreen(mainWin); 
+0

谢谢。这个技巧很好。 – user1173240 2013-05-14 09:37:37