• 6412阅读
  • 2回复

濒临崩溃的边缘:如何在无父窗体的QDialog最小化时隐藏它? [复制链接]

上一主题 下一主题
离线csoapy
 

只看楼主 倒序阅读 楼主  发表于: 2010-04-07

我新建了个GUI工程,父类设为QDialog,想模仿CCPorxy那样的界面:当最小化按钮被点击时把主界面自动隐藏起来。
思路:响应QEvent::WindowStateChange事件,如果是最小化就hide()它。但是都快一天了,这么一个简单的问题,无果。
NND,实在不行就得:winEvent()了。

代码如下:
  1. void Dialog::changeEvent(QEvent *e)
  2. {
  3.     QDialog::changeEvent(e);
  4.     switch (e->type())
  5.     {
  6.     case QEvent::WindowStateChange:
  7.         if((this->windowState() & Qt::WindowMinimized) == Qt::WindowMinimized)
  8.         {
  9.             QMessageBox::about(this,QString::fromLocal8Bit("测试,2010-04-07"), QString::fromLocal8Bit("最小化时隐藏窗体。"));
  10.             //this->accept();   //程序自己退出
  11.             //e->accept();
  12.             //QHideEvent he;
  13.             //qApp->postEvent(this, &he, Qt::NormalEventPriority);
  14.             //qApp->postEvent(this, new QHideEvent, Qt::NormalEventPriority);
  15.             //--------------------------------------------------------
  16.             // 当QDialog::changeEvent(e);在本函数最前时
  17.             // 以下一条语句的2种组合
  18.             // 00, not work
  19.             // 01, not work
  20.             this->hide();       // 0
  21.             //QDialog::hide();  // 1
  22.             if (this->isHidden())// “已经隐藏”的对话框弹出,确定后程序退出,但是如果注释掉这两句,在第二次最小化时退出
  23.                 QMessageBox::about(this,QString::fromLocal8Bit("测试,2010-04-07"), QString::fromLocal8Bit("已经隐藏窗体。"));
  24.             //--------------------------------------------------------
  25.             // 当QDialog::changeEvent(e);在本函数最前时
  26.             // 以下两条语句的4种组合
  27.             // 00, not work
  28.             // 01, not work
  29.             // 10, not work
  30.             // 11, not work
  31.             //this->hide();       // 0
  32.             //QDialog::hide();  // 1
  33.             //e->accept();        // 0
  34.             //e->ignore();      // 1
  35.             //--------------------------------------------------------
  36.             // 当QDialog::changeEvent(e);在本函数最后时
  37.             // 以下两条语句的4种组合
  38.             // 00, not work
  39.             // 01, not work
  40.             // 10, not work
  41.             // 11, not work
  42.             //this->hide();       // 0
  43.             //QDialog::hide();  // 1
  44.             //return;             // 1:use, 0:not use
  45.             //--------------------------------------------------------
  46.             // 当QDialog::changeEvent(e);在本函数最后时
  47.             // 以下三条语句的8种组合
  48.             // 000, not work
  49.             // 001, not work
  50.             // 010, not work
  51.             // 011, not work
  52.             // 100, not work
  53.             // 101, not work
  54.             // 110, not work
  55.             // 111, not work
  56.             //this->hide();       // 0
  57.             //QDialog::hide();  // 1
  58.             //e->accept();        // 0
  59.             //e->ignore();      // 1
  60.             //return;             // 1:use, 0:not use
  61.         }
  62.         break;
  63.     case QEvent::Hide:
  64.         QMessageBox::about(this,QString::fromLocal8Bit("测试,2010-04-07"), QString::fromLocal8Bit("窗体被隐藏。"));
  65.         break;
  66.     case QEvent::HideToParent:
  67.         QMessageBox::about(this,QString::fromLocal8Bit("测试,2010-04-07"), QString::fromLocal8Bit("窗体被隐藏到上层。"));
  68.         break;
  69.     case QEvent::LanguageChange:
  70.         ui->retranslateUi(this);
  71.         break;
  72.     default:
  73.         break;
  74.     }
  75.     //QDialog::changeEvent(e);
  76. }
离线yangfanxing
只看该作者 1楼 发表于: 2010-04-07

if((this->windowState() & Qt::WindowMinimized) == Qt::WindowMinimized)
.......
PHPWind好恶心。。。不想看这种界面。。。
离线csoapy

只看该作者 2楼 发表于: 2010-04-13
引用第1楼yangfanxing于2010-04-07 15:07发表的  :

这个地方有问题?但我是可以抓到最小化事件的。
快速回复
限100 字节
 
上一个 下一个