視窗的螢幕置中顯示問題,在各開發工具中原理相同,首先使用特定的方法得到顯示螢幕的寬度和高度,再根據視窗本身的寬度和高度計算出視窗的左上方座標位置.
Qt中可以採用兩種方法達到視窗的螢幕置中顯示:
方法一: 顯示前先計算出視窗顯示位子,並移到對應位子後再顯示視窗
int main(int argc, char *argv[])
{
QTextCodec::setCodecForTr(QTextCodec::codecForName("GB18030"));
QApplication a(argc, argv);
QDesktopWidget *pDesk = QApplication::desktop();
CVxMainWindow w(pDesk);
w.move((pDesk->width() - w.width()) / 2, (pDesk->height() - w.height()) / 2);
w.show();
return a.exec();
}
在表單類的構造方法中,如果使用 setFixedSize(800, 600); 設定了視窗的固定大小, 則運行程式時能達到視窗置中顯示效果, 否則視窗並不能按所期望的置中顯示在螢幕中,需要採用下面的方法,在移動和顯示視窗前重新設定下視窗的大小.
int main(int argc, char *argv[])
{
QTextCodec::setCodecForTr(QTextCodec::codecForName("GB18030"));
QApplication a(argc, argv);
QDesktopWidget *pDesk = QApplication::desktop();
CVxMainWindow w(pDesk);
w.resize(800, 600);
w.move((pDesk->width() - w.width()) / 2, (pDesk->height() - w.height()) / 2);
w.show();
return a.exec();
}
方法二: 視窗顯示後再移動到合適的位子
int main(int argc, char *argv[])
{
QTextCodec::setCodecForTr(QTextCodec::codecForName("GB18030"));
QApplication a(argc, argv);
QDesktopWidget *pDesk = QApplication::desktop();
CVxMainWindow w(pDesk);
w.show();
w.move((pDesk->width() - w.width()) / 2, (pDesk->height() - w.height()) / 2);
return a.exec();
}
先顯示後移動容易產生視窗閃爍,本人不建議採用方法二.
注意:
1 使用QTextCodec::setCodecForTr(QTextCodec::codecForName("GB18030"));
請引入: #include <QtCore/QtCore>
2 不能將參數 1 從“QDesktopWidget *”轉換為“QWidget *”
請引入: #include <QtGUI/QtGUI>