• 6769阅读
  • 5回复

求助!请教各位对于一个置顶的QT程序如何让ALT+F4组合键失效 [复制链接]

上一主题 下一主题
离线nibiao
 
只看楼主 正序阅读 楼主  发表于: 2007-10-25
— 本帖被 XChinux 执行加亮操作(2008-07-18) —
如题,我写的一个密码验证的qt程序,它是一个全屏置顶的窗口,现在要实现让ALT+F4键失效,也就是让这个程序只有输入对的密码后才能退出程序,关闭窗口.现在是ALT+F4键就可以把程序杀掉.弄了好几天了,麻烦斑竹和大家帮帮忙,谢谢啦~~
离线wangowen

只看该作者 5楼 发表于: 2007-10-26
还有就是你说的“只有输入对的密码后才能退出程序,关闭窗口”,其实可以可以重载closeEvent(),在closeEvent()里面判断一下密码是否正确。正确则accept,错误的话ignore。(这个应该是你要的答案)
离线wangowen

只看该作者 4楼 发表于: 2007-10-26
Alt+F4会触发closeEvent事件,重载一下closeEvent()函数在里面做个判断是否ignore还是accept
void Widget::keyPressEvent(QKeyEvent *event)
{
    if(event->key() == Qt::Key_Alt)
    {
        isAlt = true;
    }
}
void Widget::keyReleaseEvent(QKeyEvent *event)
{
    if(event->key() == Qt::Key_Alt)
    {
        isAlt = false;
    }
/////////////
}
void Widget::closeEvent(QCloseEvent *event)
{
    if(isAlt)
    {
        event->ignore();
    }
    else
    {
        event->accept();
    }
}
离线wangowen

只看该作者 3楼 发表于: 2007-10-26
Alt+F4会触发closeEvent事件,重载一下closeEvent()函数在里面做个判断是否ignore还是accept
void Widget::keyPressEvent(QKeyEvent *event)
{
    if(event->key() == Qt::Key_Alt)
    {
        isAlt = true;
    }
}
void Widget::keyReleaseEvent(QKeyEvent *event)
{
    if(event->key() == Qt::Key_Alt)
    {
        isAlt = false;
    }
/////////////
}
void Widget::closeEvent(QCloseEvent *event)
{
    if(isAlt)
    {
        event->ignore();
    }
    else
    {
        event->accept();
    }
}
离线nibiao
只看该作者 2楼 发表于: 2007-10-25
我觉得可以 但是如何写呢 Alt是个比较特殊的键.我看了篇文章上面有这么一段,是说Tab键的
对事件的处理总是先从QWidget::event()函数开始,所以如果要处理tab消息,就需要在子类中重写虚拟函数event(),然后静态调用缺省的QWIdGet::event()函数,完成默认的对其他事件的分派。
bool MyWidget::event(QEvent *event) {    if (event->type() == QEvent::KeyPress) {        QKeyEvent *ke = static_cast<QKeyEvent *>(event);        if (ke->key() == Qt::Key_Tab) {            // special tab handling here            return true;        }    } else if (event->type() == MyCustomEventType) {        MyCustomEvent *myEvent = static_cast<MyCustomEvent *>(event);        // custom event handling here        return true;    }    return QWidget::event(event); }


用到alt键应该怎么写,有试过的,麻烦帖点实现的代码 谢谢了~
离线zzh

只看该作者 1楼 发表于: 2007-10-25
把ALT+F4设置成其他动作可以吗?也就是说,覆盖系统的ALT+F4。
快速回复
限100 字节
 
上一个 下一个