//今天看了书上的一堆的理论知识,怎么说呢?我可能更喜欢实践,但是,没有理论,就没有实践,那叫瞎搞。
----------------------------------------------------------------------------------------------------------华丽的分割线---------------------------------------------------------------------------------------------
那么让我们开始吧:
首先让我们来看看我们要重写的一些函数:
protected:
///1按键
/*当用户按下按键产生的一个事实*/
void keyPressEvent(QKeyEvent *event);
/*当用户按键抬起触发的一个事件,如果一直按住会一直触发这个事件*/
void keyReleaseEvent(QKeyEvent *event);
///2定时器
/*好像是QObject自带的,*/
void timerEvent(QTimerEvent *event);
//3按控件的键事件过滤
/**这个东西我认为可能是个鸡肋,但是存在即有理*/
bool eventFilter(QObject * obj, QEvent * event);
//4鼠标事件
/*鼠标按下事件*/
void mousePressEvent(QMouseEvent *event);
/*鼠标抬起事件*/
void mouseReleaseEvent(QMouseEvent * event);
/*鼠标双击事件*/
void mouseDoubleClickEvent(QMouseEvent * event);
注意不要把projected:这句给漏了。因为这几个函数都是基类里面的,重写的是基类里面的虚函数;
那么让我们来看看具体实现吧。第一个具体实现是按键按下事件:
void MultipleDocument::keyPressEvent(QKeyEvent *event){
if (event->key() == Qt::Key_Space)
{
QMessageBox::information(this, tr("Home"), tr("kkkkk"));
return;
}
}
这里实现的是按空格键弹出一个QMessageBox弹窗跟C#的MessageBox差不多
下面实现的是按键抬起如果一直按住会一直触发事件:
void MultipleDocument::keyReleaseEvent(QKeyEvent *event){
if (event->key() == Qt::Key_Space)
{
QMessageBox::information(this, tr("Home"), tr("kkkkk"));
return;
}
}
我的编译器一直按住,他会一直触发这个弹窗,
下面的实现的是定时器,这是每个继承QObject的控件都有这个虚函数:
myTimerId= startTimer(1000);
这段代码的意思是
开始一个定时器。并返回一个
定时器的标识,也就是windows编程的
句柄,1000代表的意思的每隔
1000毫秒执行一次
我们来看看定时器的具体实现:
void MultipleDocument::timerEvent(QTimerEvent *event){
if (event->timerId()==myTimerId)
{
killTimer(myTimerId);
}
else{
QWidget::timerEvent(event);
}
}
如果定时器的标识是这个标识,那就就执行那个事件,如果不是就传递到下一个定时事件,
killTimer的意思是结束这个标识的定时器
鼠标事件,鼠标按下,鼠标释放,鼠标移动,事件介绍:
void MultipleDocument::mousePressEvent(QMouseEvent *event){
qDebug() << QString::fromLocal8Bit("按下:") << event->x();
}
void MultipleDocument::mouseReleaseEvent(QMouseEvent * event){
qDebug() << QString::fromLocal8Bit("释放") << event->x();
}
void MultipleDocument::mouseDoubleClickEvent(QMouseEvent * event){
qDebug() << QString::fromLocal8Bit("双击") << event->x();
}
注意双击的时候,第一点击会产生一个按下,释放事件,
----------------------------------------------------------------------------------------华丽的结束县-------------------------------------------------------------------------
-------------------------
----------------
书上的理论知识太多,需要自己动手丰衣足食。