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

时间:2009-07-03 15:17:52

标签: qt windows-mobile

每当我通过我用Qt开发的代码设置最大化Windows Mobile应用程序时,它们的标题栏就会消失,并且只有Windows Mobile的默认标题栏。但是,每当我点击那个X按钮时,应用程序都不会关闭;相反,它一直在后面跑。

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

经过几次Google搜索,我意识到这是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项。这合理吗?可能是这种行为的原因是什么?你知道如何解决这个问题吗?

提前致谢。

4 个答案:

答案 0 :(得分:4)

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

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

答案 1 :(得分:1)

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

答案 2 :(得分:1)

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

需要三个可能的论点:

  • SHDB_HIDE - 这是默认设置,WM很可能会显示“X”按钮,并会在按下时最小化您的应用。另请注意,在某些设备上,“X”按钮会向您的应用程序发送WM_QUIT

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

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

答案 3 :(得分:1)

感谢您不可或缺的答案。他们都为我的解决方案做出了贡当我尝试将X按钮更改为“确定”按钮时,我发现有一个Windows CE specific flag to make OK button visible

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

设置了Button之后,我已经覆盖了事件(QEvent *)函数来捕获从OK触发的事件以关闭应用程序。

bool MainWindow::event(QEvent *mEvent)
{   

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

    return QMainWindow::event(mEvent);

}

现在它就像魅力=)