2009-07-03 103 views
3

每當我用Qt開發的代碼設置最大化Windows Mobile應用程序時,它們的標題欄消失,並且只保留Windows Mobile的默認標題欄。但是,無論何時點擊該X按鈕,應用程序都不會關閉;相反,它保持在後面。Windows Mobile中的非關閉關閉按鈕(使用Qt開發)

alt text http://img27.imageshack.us/img27/2296/winmobileexit.jpg

一些谷歌搜索後,我意識到,這是default behaviour for X button on Windows Mobile,這也是我的問題的原因;當我想通過點擊激活,從設置 - >系統 - >內存 - >運行的程序,以顯示最小化/牆根程序,

alt text http://img17.imageshack.us/img17/7387/winmobileexit2.jpg

應用程序未重新繪製,並保持不可見和子部件應對各自的活動:

alt text http://img505.imageshack.us/img505/5276/winmobileexit3.jpg

我不認爲這種行爲是與我的代碼的任何方式,如出現此問題,即使下面簡單的代碼:(我將不勝感激,如果你可以測試該設備上)

#include <QApplication> 
#include <QtGui> 


int main(int argc, char *argv[]) 
{ 
    QApplication a(argc, argv); 
    QLabel w("aduket"); 
    w.setWindowState(w.windowState()|Qt::WindowMaximized); 
    w.show(); 
    return a.exec(); 
} 

雖然,我試圖得到該按鈕的關閉事件,我不能。再一次,只有解決方案是刪除該X按鈕並將一個Exit項添加到右下方的菜單。這是否合理?這種行爲的原因是什麼?你有任何想法如何解決這種行爲?

在此先感謝。

+1

你試過當您使用MagicButton會發生什麼? (如果你不知道它,這是一個任務切換器,它也使得右上角的「X」成爲一個真正的關閉按鈕。http://www.trancreative.com/mb.aspx) – balpha 2009-07-03 15:23:15

回答

4

「智能最小化」按鈕被創建的Windows時,一個樣式位通常設定處理 - 特別WS_NONAVDONEBUTTON。對於CF應用程序,這是通過將MinimizeButton屬性設置爲false來控制的。在C/C++中,通過在調用CreateWindow時添加該位或之後設置位來完成(直接或者如Shane所示,通過SHDoneButton)。

Qt顯然是創建一個Window,所以在這個過程中你需要改變樣式位。我不是一個Qt開發人員,所以我不知道在這個框架中是如何完成的。

1

使用.NET/CF時,每個窗體上都有一個MinimizeBox屬性,將其設置爲false會將該按鈕更改爲[Ok],並關閉該應用程序。我猜Qt可能有類似的設置。

1

如果您不想使用默認的Windows Mobile行爲,則需要調用函數SHDoneButton

它有三個可能的參數:

  • SHDB_HIDE - 這是默認的WM最有可能顯示「X」按鈕,並在它的壓制將最大限度地減少您的應用程序。另請注意,在某些設備上,「X」按鈕將向您的應用程序發送WM_QUIT

  • SHDB_SHOW - 將顯示一個「確定」按鈕,並在按下時向您的窗口發送IDOK WM_COMMAND

  • SHDB_SHOWCANCEL - 將顯示一個'x'按鈕,並在按下時向您的窗口發送一個IDCANCEL WM_COMMAND

1

感謝您的不可或缺的答案。他們都對我的解決方案有所貢獻當我試圖將X按鈕更改爲OK按鈕時,我發現有一個Windows CE specific flag to make OK button visible

#ifdef Q_OS_WINCE 
     setWindowFlags(windowFlags()|Qt::WindowOkButtonHint); 
#endif 

設置該按鈕後,我已overrided事件(QEvent的*)函數趕上,以關閉應用程序從確定觸發事件。

bool MainWindow::event(QEvent *mEvent) 
{ 

    if (mEvent->type()==QEvent::OkRequest) 
    { 
     qApp->closeAllWindows(); 
     return true; 
    } 

    return QMainWindow::event(mEvent); 

} 

,現在,它就像一個魅力=)