• 9151阅读
  • 9回复

怎么捕捉点击"X"试图关闭窗口的信号 [复制链接]

上一主题 下一主题
离线igoo
 
只看楼主 倒序阅读 楼主  发表于: 2006-07-26
[ 此贴被XChinux在2006-07-26 12:37重新编辑 ]
离线igoo
只看该作者 1楼 发表于: 2006-07-26
我有一系列子窗口,当关闭的时候我想隐藏起来,而不是真正的关闭
但是当用户关闭主窗口的时候实现真正的关闭

一个做法是让这些子窗口继承一个实现了closeenvent的类
离线XChinux

只看该作者 2楼 发表于: 2006-07-26
正解
二笔 openSUSE Vim N9 BB10 XChinux@163.com 网易博客 腾讯微博
承接C++/Qt、Qt UI界面、PHP及预算报销系统开发业务
离线igoo
只看该作者 3楼 发表于: 2006-07-26
但是我经过实验发现
当子窗口接收到closeenvent的时候,该窗口的销毁好像已经没法挽回了
这个函数的作用好像就是为了给窗口清楚一些资源的机会,而不是用来干其他的目的

如果能有windows中类似WM_CLOSE之类的消息就好了;如果在qt里面直接拦截WM_CLOSE

的话就平台相关,这样似乎和用qt的初衷违背了


帮帮我啊
离线ziding

只看该作者 4楼 发表于: 2006-07-28
引用第3楼igoo2006-07-26 15:51发表的“”:
但是我经过实验发现
当子窗口接收到closeenvent的时候,该窗口的销毁好像已经没法挽回了
这个函数的作用好像就是为了给窗口清楚一些资源的机会,而不是用来干其他的目的
如果能有windows中类似WM_CLOSE之类的消息就好了;如果在qt里面直接拦截WM_CLOSE
.......

event->ingore();
刚开始学习QT,希望各位高手不吝赐教,谢谢~
离线ball
只看该作者 5楼 发表于: 2006-08-22
用QDialog
不要用QWidget
离线ediwon
只看该作者 6楼 发表于: 2006-08-22
QDialog默认closeEvent处理方式是hide()
而QWidget如果想让点击X不关掉,而hide()的话。
重写
virtual closeEvent(QCloseEvent *event)
{
    this->hide();
}



ps:
ziding
说的ignore()只会使得X无效而并达不到hide效果
BLOG:
http://www.ediwon.com
-------------------------------
离线lj_0212

只看该作者 7楼 发表于: 2006-08-22
引用第3楼igoo2006-07-26 15:51发表的“”:
但是我经过实验发现
当子窗口接收到closeenvent的时候,该窗口的销毁好像已经没法挽回了
这个函数的作用好像就是为了给窗口清楚一些资源的机会,而不是用来干其他的目的
如果能有windows中类似WM_CLOSE之类的消息就好了;如果在qt里面直接拦截WM_CLOSE
.......



使用有问题。
void MyWidget::closeEvent(QCloseEvent *e)
{
    ...........
  QWidget::closeEvent(e);
    ...........
}
不要加入带有颜色的这行。 只加入自己的代码就行了。
离线dannyt
只看该作者 8楼 发表于: 2006-08-24
我最近也碰到这个问题,不希望用户用窗口管理器把我的dialog关掉。

按照楼上ediwon的思路,我重载了QDialog::closeEvent(QCloseEvent *e),避免了X试图关闭我的窗口。

可是还有一个问题,我在我的对话框(继承自QDialog)中按Esc键的时候,还是会把dialog给关掉,有没有办法把这个也截获掉呢?

大家有没有什么简单的方法呢?小弟先谢过了!
离线ediwon
只看该作者 9楼 发表于: 2006-08-25
void Window::keyPressEvent(QKeyEvent *event)
{
    if (event->key() == Qt::Key_Escape)
        event->ignore();
}
BLOG:
http://www.ediwon.com
-------------------------------
快速回复
限100 字节
 
上一个 下一个