窗體的基類中沒有設定大小,所以才不能居中,若要窗體居中,必須使用setfixedsize()函數或者resize()函數設定窗體的大小,居中才能正常使用
最近開發中,遇到了窗體不能居中的問題,看了網上的很多文章,窗口居中,無非都是move至窗口的中心目標; 有兩種方式, 一種在構造函數中直接計算中心坐標; 另一種是在窗口show後再move至相應坐標。但是自己在構造函數中添加了對應的句子以後,窗體不在窗口的(0,0)點顯示,反而在右下角顯示,自己很是郁悶。網上的兩種方法,基本操作如下:
方法一:在窗口(QWidget類及派生類)的構造函數中添加如下代碼:
#include <QDesktopWidget>
//.......
QDesktopWidget* desktop = QApplication::desktop(); // =qApp->desktop();也可以
//.......
重新編譯後,該窗口啟動時在屏幕居中的位置。
方法二:在調用show()函數後調用move()函數,j將窗口移動到屏幕中央。
#include <QDesktopWidget>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MainWindow w;
w.show();
w.move ((QApplication::desktop()->width() - w.width())/2,(QApplication::desktop()->height() - w.height())/2);
}
自己按照方法一在構造函數中添加後,窗體還是不能居中,最後才發現,原來是窗體的基類中沒有設定大小,所以才不能居中,若要窗體居中,必須使用setfixedsize()函數或者resize()函數設定窗體的大小,居中才能正常使用。
[cpp] view plain copy
- /**
- *構建函數中move至中心坐標時, 必須應用setFixedSize(500,500); 否則達不到期望居中顯示的目標
- */
- ialog:Dialog(QObject *parent=0):QDialog(parent) {
- ...
- this->setFixedSize(500,500); //這句必須添加
- this->setWindowTitle(tr("StyleSheet"));
- QDesktopWidget *desk=QApplication::desktop();
- int wd=desk->width();
- int ht=desk->height();
- this->move((wd-width())/2,(ht-height())/2);
[cpp] view plain copy
- /**
- *方式一: 先顯示後移動會產生窗口閃爍,有點不太好
- */
- int main(int argc,char **argv) {
- QApplication app(argc,argv);
- Dialog dialog;
- dialog.show();
- QDesktopWidget *desk=QApplication::desktop();
- int wd=desk->width();
- int ht=desk->height();
- dialog.move((wd-dialog.width())/2,(ht-dialog.height())/2);
- return app.exec();
- }
[cpp] view plain copy
- /**
- *方式二: 在移動和顯示窗口前重新設置窗口的大小,這樣就能達到期望的效果且不會閃爍
- */
- int main(int argc,char **argv)
- {
- QApplication app(argc,argv);
- Dialog dialog;
- dialog.resize(500,500); //重新設置大小
- QDesktopWidget *desk=QApplication::desktop();
- int wd=desk->width();
- int ht=desk->height();
- dialog.move((wd-dialog.width())/2,(ht-dialog.height())/2);
- dialog.show();
- }
http://blog.csdn.net/u013394556/article/details/40394079
窗體的基類中沒有設定大小,所以才不能居中,若要窗體居中,必須使用setfixedsize()函數或者resize()函數設定窗體的大小,居中才能正常使用