how to center a Qt mainform on the screen?

I've tried these in my mainform's constructor

That's likely the problem. You probably don't have valid geometry information at this point because the object isn't visible.

When the object is first constructed, it's essentially positioned at (0,0) with it's expected (width,height), as such:

frame geometry at construction:  QRect(0,0 639x479) 

But, after being shown:

frame geometry rect:  QRect(476,337 968x507) 

Thus, you can't yet rely on your frameGeometry() information.

EDIT: With that said, I presume you can easily move it as desired, but for completeness I'm dropping in Patrice's code which doesn't depend on the frame geometry information:

QRect desktopRect = QApplication::desktop()->availableGeometry(this);
QPoint center = desktopRect.center();

move(center.x() - width() * 0.5, center.y() - height() * 0.5);

The move function (see QWidget doc) takes one QPoint or two int as parameter. This corresponds to the coordinates of the top-left corner of your Widget (relative to its parent; Here OS Desktop). Try:

QRect desktopRect = QApplication::desktop()->availableGeometry(this);
QPoint center = desktopRect.center();

move(center.x()-width*0.5, center.y()-height*0.5);

availableGeometry() is deprecated.

move(pos() + (QGuiApplication::primaryScreen()->geometry().center() - geometry().center()));

Tags:

Qt

Qt4

Qt4.6