QMouseEvent
):按下的键、指针当前位置(QWheelEvent
):滚轮移动的方向、距离//xx.h
void mousePressEvent(QMouseEvent *event);
void mouseReleaseEvent(QMouseEvent *event);
void wheelEvent(QWheelEvent *event);
//xx.cpp
/*******************************
* 鼠标左键按下事件, 左键按下变手,右键变图
*******************************/
void TextFinder::mousePressEvent(QMouseEvent *event){
if(event->button() == Qt::LeftButton){
QCursor cursor;
cursor.setShape(Qt::ClosedHandCursor);
QApplication::setOverrideCursor(cursor);//设置形状
QPoint offset = event->globalPos()-pos();//返回鼠标指针和窗口之间的位置差
qDebug() << "offset:" << offset;
}
else if(event->button() == Qt::RightButton){
QCursor cursor(QPixmap(":/1.jpg"));
QApplication::setOverrideCursor(cursor);
}
}
/*******************************
* 鼠标释放事件
*******************************/
void TextFinder::mouseReleaseEvent(QMouseEvent *event){
QApplication::restoreOverrideCursor();//恢复指针形状
}
/*******************************
* 滚轮事件
*******************************/
void TextFinder::wheelEvent(QWheelEvent *event){
if(event->delta() > 0) //远离
ui->textEdit->zoomIn();
else //靠近
ui->textEdit->zoomOut();
qDebug() << event->delta(); //滚动一下为15°
}
QKeyEvent
):按键被按下时,事件会被发送给拥有键盘输入焦点的部件key()
来获取具体按键modifiers()
来获取,从而配合key()
实现组合键功能//xx.h
void keyPressEvent(QKeyEvent *event);
//xx.cpp
//每次按键会跳入,ctrl和M一起按的时候,会同时处理,不显示“can't wait~out!”
void TextFinder::keyPressEvent(QKeyEvent *event){
if(event->modifiers() == Qt::ControlModifier){
qDebug() << "ctrl in!wait M~";
if(event->key() == Qt::Key_M){
setWindowState(Qt::WindowMaximized);
return;
}
qDebug() << "can't wait~out!";
}
}
QTimerEvent
):对于一个QObject
事件,需要用int QObject::startTimer(int interval)
函数来开启定时器,单位为毫秒,返回的整型为定时器编号;QTimer
,可以使用信号/槽qrand()
:产生随机数qsrand()
:设定初始值,否则会一直出一样的随机数用QTimerEvent
调用:
//xx.h声明
private:
void timerEvent(QTimerEvent *event);
//xx.cpp构造函数
//定时器会一直开着,用killtimer()关
id1 = startTimer(1000);
id2 = startTimer(2000);
//xx.cpp函数定义
void TextFinder::timerEvent(QTimerEvent *event){
if(event->timerId() == id1){
qDebug() << "I'm timerEvent~1";
}
else if(event->timerId() == id2){
qDebug() << "I'm timerEvent~2";
}
}
用QTimer
调用:
//xx.h声明槽
private slots:
void timerUpdate();
//--------------------------------------------------
//xx.cpp
//构造函数关联信号、槽,打开定时器
QTimer *timer = new QTimer(this);
connect(timer,SIGNAL(timeout()),this,SLOT(timerUpdate()));
timer->start(1000);//不关掉会一直跳
//槽函数,显示当前时间
void TextFinder::timerUpdate(){
qDebug() << "进入定时器事件~";
QTime time = QTime::currentTime();
QString text = time.toString("hh:mm");
if((time.second()%2==0)) text[2]=' ';
ui->lcdNumber->display(text);
}
随机数:
//写种子
//取时间0点到当前时间经过的秒数
qsrand(QTime(0,0,0).seccTo(QTime::currentTime()));
//产生随机数
//用取余的方法得到 0-99 的正整数
int rand = qrand() % 100;