Qt事件

PS:QTimer::singleShot(0,this,SLOT(test_time()));//只触发一次的定时器

1.timerEvent(QTimerEvent*event)

//定时器事件,相当于开启定时器(不过得跟踪定时器ID)。通常更为简单的方式是为每个定时器分别创建一个QTimer对象

2.安装时间过滤器

如果我们想使用Space(空格)键把光标移动到下一个QLineEvent中:

一是:子类化QLineEdit并且重新实现keyPressEvent(),由它调用focusNextChild()

如下:

void Dialog::keyPressEvent(QKeyEvent *event)
{
  If(event->key() == Qt::key_Space) {
  focusNextChild();
} else {
  QlineEdit::keyPressEvent(event);
 }
}

这种方法有一个主要的缺点:如果在窗体中使用了好几种不同类型的窗口部件(例如,QComboBox和QSpinBox),我们也必须对它们逐一子类化,以便让它们能够实现相同的行为。

二是:监视它的子窗口部件中键的按下事件并且在监视代码中实现所需的行为。这种方法可以通过使用时间过滤器来实现。创建一个事件过滤器包括如下两步过程:

1.通过对目标对象调用installEventFilter()来注册监视对象。

2.在监视对象的eventFilter()函数中处理目标对象的事件。

如下:

/*构造函数里*/
ui->lineEdit->installEventFilter(this);
ui->lineEdit_2->installEventFilter(this);

/*.cpp*/
bool Dialog::eventFilter(QObject *target, QEvent *event)
{
   if(target == ui->lineEdit || target == ui->lineEdit_2) {
       if(event->type() == QEvent::KeyPress) {
           QKeyEvent *keyEvent = static_cast<QKeyEvent *>(event);
           if(keyEvent->key() == Qt::Key_Space) {
               focusNextChild();
               return true;
           }
       }
   }
   return QDialog::eventFilter(target, event);
}

7.3 showEvent(QShowEvent *event)、closeEvent(QCloseEvent *event)

//showEvent在程序启动后自动执行,而closeEvent则在程序结束后自动执行

posted @ 2014-10-18 13:24  纠纠结结  阅读(3313)  评论(0编辑  收藏  举报