Windows Mobile中的非关闭关闭按钮(使用Qt开发)

问题描述:

每当我用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

“智能最小化”按钮被创建的Windows时,一个样式位通常设定处理 - 特别WS_NONAVDONEBUTTON。对于CF应用程序,这是通过将MinimizeButton属性设置为false来控制的。在C/C++中,通过在调用CreateWindow时添加该位或之后设置位来完成(直接或者如Shane所示,通过SHDoneButton)。

Qt显然是创建一个Window,所以在这个过程中你需要改变样式位。我不是一个Qt开发人员,所以我不知道在这个框架中是如何完成的。

使用.NET/CF时,每个窗体上都有一个MinimizeBox属性,将其设置为false会将该按钮更改为[Ok],并关闭该应用程序。我猜Qt可能有类似的设置。

如果您不想使用默认的Windows Mobile行为,则需要调用函数SHDoneButton

它有三个可能的参数:

  • SHDB_HIDE - 这是默认的WM最有可能显示“X”按钮,并在它的压制将最大限度地减少您的应用程序。另请注意,在某些设备上,“X”按钮将向您的应用程序发送WM_QUIT

  • SHDB_SHOW - 将显示一个“确定”按钮,并在按下时向您的窗口发送IDOK WM_COMMAND

  • SHDB_SHOWCANCEL - 将显示一个'x'按钮,并在按下时向您的窗口发送一个IDCANCEL WM_COMMAND

感谢您的不可或缺的答案。他们都对我的解决方案有所贡献当我试图将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); 

} 

,现在,它就像一个魅力=)