Qt程式設定介面顯示在螢幕中央(包括多屏機的處理)
阿新 • • 發佈:2019-01-25
最近養了一隻笨笨的狗子,感覺和養個孩子似的,心累...
下面要開始我們的正題了,咳咳。最近在程式中遇到一個問題,在網上搜了很久也沒搜到類似的問題,不過還是搜到了幾篇相關的博文,才解決了,所以特來把這個問題以及解決方式寫在這裡,方便後期遇到類似問題的人有所啟發。
我們寫介面的時候都會讓它顯示在螢幕中央,因為到處亂跑的話實在是不方便,之前我一直使用下面這句程式碼:
int main(int argc, char * argv[])
{
QApplication app(argc, argv);
Window window;//這個類繼承自QWidget
window.move((app.desktop()->width() - window.width()) / 2, (app.desktop()->height() - window.height()) / 2);
window.show();
return app.exec();
}
這段程式碼是沒問題的,百試百靈,包治百病。但是因為面向的客戶大多是金融分析師和操盤手,他們為了更直觀全面的看到實時行情,所以他們的電腦都是多屏機,少則2個顯示器,多則能達到8個螢幕(2*4)。在給他們使用程式的時候他們的一致反饋是程式的介面總是顯示不全,檢視起來不方便。類似這樣:
查閱了很多資料查到一個最根本的類QDesktopWidget。有關於這個類的詳細說明請參考Qt助手文件或者這篇部落格QDesktopWidget詳細說明。下面直接放一個小程式的程式碼,複製即可用:
這樣子就可以了,是不是很簡單。希望能幫助到你,比心。int main(int argc, char * argv[]) { QApplication a(argc, argv); screenTest widget; widget.show(); return a.exec(); } void screenTest::showInfo()//自己定義的函式,用於顯示資訊 { QDesktopWidget * desktop = QApplication::desktop(); //獲取程式所在螢幕是第幾個螢幕 int current_screen = desktop->screenNumber(this); //獲取程式所在螢幕的尺寸 QRect rect = desktop->screenGeometry(current_screen); //獲取所有螢幕總大小 QRect rectA = desktop->geometry(); //獲取所有螢幕的個數 int screen_count = desktop->screenCount(); //獲取主螢幕是第幾個 int prim_screen = desktop->primaryScreen(); QString temp = "total screen size = " + QString::number(screen_count); temp = temp + "\ncurrent screen num = " + QString::number(current_screen); temp = temp + "\ncurrent screen rect " + QString::number(rect.width()) + "*" + QString::number(rect.height()); temp = temp + "\nwhole screen rect " + QString::number(rectA.width()) + "*" + QString::number(rectA.height()); }