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项添加到右下方的菜单。这是否合理?这种行为的原因是什么?你有任何想法如何解决这种行为?
在此先感谢。
“智能最小化”按钮被创建的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
- 将显示一个“确定”按钮,并在按下时向您的窗口发送IDOKWM_COMMAND
。SHDB_SHOWCANCEL
- 将显示一个'x'按钮,并在按下时向您的窗口发送一个IDCANCELWM_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);
}
,现在,它就像一个魅力=)
你试过当您使用MagicButton会发生什么? (如果你不知道它,这是一个任务切换器,它也使得右上角的“X”成为一个真正的关闭按钮。http://www.trancreative.com/mb.aspx) – balpha 2009-07-03 15:23:15