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

3
每当我通过使用Qt开发的代码将Windows Mobile应用程序设置为最大化时,它们的标题栏会消失,只剩下Windows Mobile的默认标题栏。但是,每当我点击那个X按钮时,应用程序不会关闭;相反,它仍然在后台运行。
经过几次谷歌搜索,我意识到这是Windows Mobile上X按钮的默认行为,也是我的问题的原因。当我想通过从“设置”->“系统”->“内存”->“正在运行的程序”中点击“激活”来显示最小化/隐藏的程序时,就会出现这个问题。

应用程序没有重绘并保持不可见,子小部件响应各自的事件:

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按钮并在右下菜单中添加一个退出项。这合理吗?可能是什么原因导致了这种行为?你有任何解决这种行为的想法吗?
谢谢您的帮助。

1
你尝试过使用MagicButton的效果吗?(如果你不知道,它是一个任务切换器,同时也将右上角的“X”变成了真正的关闭按钮。http://www.trancreative.com/mb.aspx) - balpha
我不想使用任何额外的工具/库,因为我尝试在Symbian和Windows Mobile上运行此应用程序。谢谢你的建议 :) - Özgür
4个回答

4
“智能最小化”按钮通常由一个样式位处理,该样式位在创建Windows时设置 - 具体来说是WS_NONAVDONEBUTTON。对于CF应用程序,这是通过将MinimizeButton属性设置为false来控制的。在C / C ++中,可以在调用CreateWindow时添加该位或在之后设置该位(直接或者如Shane建议的那样通过SHDoneButton)。
显然,Qt正在创建一个窗口,因此您需要在该过程中更改样式位。我不是Qt开发人员,因此不知道在该框架中如何完成此操作。

1

感谢您不可或缺的答案。它们都对我的解决方案做出了贡献。当我尝试将X按钮更改为OK按钮时,我发现有一个Windows CE特定标志,可以使OK按钮可见

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

设置了该按钮后,我覆盖了 event(QEvent*) 函数以捕获来自 OK 的事件并关闭应用程序。
bool MainWindow::event(QEvent *mEvent)
{   

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

    return QMainWindow::event(mEvent);

}

现在它像魔法一样运作良好 =)


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

1

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

它有三个可能的参数:

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

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

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接