2016-02-05 48 views
1

我正在使用MinGW爲Windows 7構建QT應用程序。 在我的代碼中,我有一個派生自QMainWindow的類。這個主窗口會多次顯示和關閉(在不同的屏幕上)。我正在使用以下代碼顯示窗口:QT QMainWindow無幀大小的全屏幾何體

this->blockSignals(true); 
this->close(); 
this->blockSignals(false); 
this->showMaximized(); 
this->setGeometry(QApplication::desktop()->availableGeometry(mDisplayNumber)); 

只有第一次執行此代碼時,窗口會按預期方式顯示。接下來,窗口顯示爲最大化,但我在屏幕底部丟失了幾個像素。

我還接收在QT的警告,則執行代碼時:

setGeometryDp:無法在QWidgetWindow /設定幾何1600x1172 + 0 + 0 'CDisplayClassWindow'。生成的幾何圖形:1600x1150 + 0 + 22(幀:8,30,8,8,自定義邊距:0,0,0,0,最小尺寸:780x539,最大尺寸:16777215x16777215)。

我不明白的是,desktop()> availableGeometry返回的幾何看起來不正確。我的問題是,我如何確定警告消息中顯示的幾何圖形? (1600x1150 + 0 + 22)

+0

我在linux ubuntu中以mDisplayNumber爲-1的方式嘗試了上面的代碼。在按鈕單擊&構造函數中執行代碼。它工作得很好。是否有可能在代碼中提供更多的細節。 (我使用QT Creator 3.6.0&Library 5.5.1) – Jeet

+0

沒有太多的細節信息要添加。我認爲這是一個Windows特定的問題。 QApplication :: desktop() - > availableGeometry()的結果看起來是正確的。我的屏幕的屏幕分辨率是1600x1200。這個函數的結果是1600x ** 1172 **,所以看起來好像爲任務欄保留了28個像素。但調用showMaximized()會導致上面顯示的警告。 (我使用的是Qt 5.5.0) – MvHorssen

回答

0

我找到了答案在這裏: https://wiki.qt.io/How_to_Center_a_Window_on_the_Screen 現在,我的顯示功能如下:

Qt::WindowStates WindowState = this->windowState(); 
if(WindowState == Qt::WindowMaximized) 
{ 
    this->setWindowState(WindowState^Qt::WindowMaximized); 
} 

this->setGeometry(
    QStyle::alignedRect(
     Qt::LeftToRight, 
     Qt::AlignCenter, 
     this->size(), 
     QApplication::desktop()->availableGeometry(mDisplayNumber))); 

this->showMaximized(); 

我仍然有一個警告:setGeometryDp:無法設置幾何1600x1150 + QWidgetWindow /'CDisplayClassWindow'上的0 + 11。生成的幾何圖形:1600x1150 + 0 + 22(幀:8,30,8,8,自定義邊距:0,0,0,0,最小尺寸:780x539,最大尺寸:16777215x16777215)。

分辨率是相同的(1600x1150),窗口如預期顯示。