⭐️我叫忆_恒心,一名喜欢书写博客的在读研究生👨🎓。
如果觉得本文能帮到您,麻烦点个赞
👍呗!
近期会不断在专栏里进行更新讲解博客~~~ 有什么问题的小伙伴 欢迎留言提问欧,喜欢的小伙伴给个三连支持一下呗。👍⭐️❤️
Qt5.9专栏
定期更新Qt的一些项目Demo
项目与比赛专栏
定期更新比赛的一些心得,面试项目常被问到的知识点。
QT5.9
专栏会定期更新有趣的Qt
知识
以工程为导向进行Qt5.9的学习,打捞基础。专栏中有Qt5.9学习笔记-仿Everything的的文件搜索的GUI工具,以及相关的基础知识。
最近在重新梳理一下Qt事件的基础知识,发现了一些有趣的知识点和开发的坑点,做一些笔记。
当涉及到Qt5.9事件时,事件系统是非常重要的一个主题。Qt5.9事件系统是一个强大的工具,它允许开发人员在Qt应用程序中响应和处理各种类型的事件。在本文中,我们将讨论Qt5.9事件系统的基础知识以及如何在应用程序中使用它来处理事件。
5 Qt5.9中的常见事件
- 定时器事件
- 鼠标事件
- 键盘事件
- 窗口事件
Qt5.9中的三种常见事件:定时器事件、鼠标事件和键盘事件。
5.1 定时器事件
定时器事件是指在指定的时间间隔内周期性地触发事件。在Qt中,我们可以通过继承QTimer
类来创建定时器对象。下面是一个简单的例子:
class MyTimer : public QTimer
{
Q_OBJECT
public:
MyTimer(QObject *parent = nullptr) : QTimer(parent)
{
connect(this, &QTimer::timeout, this, &MyTimer::onTimeout);
start(1000);
}
signals:
void timerSignal();
private slots:
void onTimeout()
{
emit timerSignal();
}
};
在上面的代码中,我们创建了一个MyTimer
类继承自QTimer
类,并重写了QTimer
类中的timeout()
方法,即定时器事件的处理函数。在MyTimer
类的构造函数中,我们通过connect()
函数将定时器的timeout
信号连接到自定义的槽函数onTimeout()
,并将定时器的时间间隔设置为1秒。在onTimeout()
槽函数中,我们发射了一个自定义的信号timerSignal()
,以便在应用程序的其他地方使用。
5.2 鼠标事件
鼠标事件是指当用户在应用程序的窗口中移动鼠标时,会触发相应的事件。在Qt中,我们可以通过重写QWidget
类的鼠标事件处理函数来处理鼠标事件。下面是一个简单的例子:
class MyWidget : public QWidget
{
Q_OBJECT
public:
MyWidget(QWidget *parent = nullptr) : QWidget(parent)
{
setFixedSize(200, 200);
}
protected:
void mousePressEvent(QMouseEvent *event) override
{
qDebug() << "Mouse Pressed:" << event->pos();
}
void mouseMoveEvent(QMouseEvent *event) override
{
qDebug() << "Mouse Moved:" << event->pos();
}
void mouseReleaseEvent(QMouseEvent *event) override
{
qDebug() << "Mouse Released:" << event->pos();
}
};
在上面的代码中,我们创建了一个MyWidget
类继承自QWidget
类,并重写了QWidget
类中的三个鼠标事件处理函数:mousePressEvent()
、mouseMoveEvent()
和mouseReleaseEvent()
。在这三个函数中,我们使用qDebug()
函数输出鼠标事件的信息,例如鼠标按下、移动和释放的位置。
5.3 键盘事件
键盘事件是指当用户在应用程序的窗口中按下或释放键盘按键时,会触发相应的事件。在Qt中,我们可以通过重写QWidget
类的键盘事件处理函数来处理键盘事件。下面是一个简单的例子:
下面是完整的代码实现:
#include <QApplication>
#include <QWidget>
#include <QTimerEvent>
#include <QMouseEvent>
#include <QKeyEvent>
#include <QLabel>
class MyWidget : public QWidget
{
public:
MyWidget(QWidget *parent = nullptr);
protected:
void timerEvent(QTimerEvent *event) override;
void mousePressEvent(QMouseEvent *event) override;
void keyPressEvent(QKeyEvent *event) override;
private:
int m_timerId;
QLabel *m_label;
};
MyWidget::MyWidget(QWidget *parent)
: QWidget(parent), m_timerId(-1)
{
m_label = new QLabel(this);
m_label->setAlignment(Qt::AlignCenter);
m_label->setText("Press the left mouse button or any key to generate events");
m_label->setGeometry(10, 10, 280, 80);
m_timerId = startTimer(1000);
}
void MyWidget::timerEvent(QTimerEvent *event)
{
if (event->timerId() == m_timerId) {
m_label->setText(QString("Timer event %1").arg(QDateTime::currentDateTime().toString("hh:mm:ss")));
} else {
QWidget::timerEvent(event);
}
}
void MyWidget::mousePressEvent(QMouseEvent *event)
{
if (event->button() == Qt::LeftButton) {
m_label->setText("Mouse left button pressed");
} else {
QWidget::mousePressEvent(event);
}
}
void MyWidget::keyPressEvent(QKeyEvent *event)
{
m_label->setText(QString("Key %1 pressed").arg(event->text()));
}
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MyWidget w;
w.show();
return a.exec();
}
这个例子演示了如何在Qt中使用定时器事件、鼠标事件和键盘事件。在窗口中,我们添加了一个QLabel控件来显示事件的信息。当定时器事件发生时,标签的文本将被更新以显示当前时间。当鼠标左键按下时,标签将显示“Mouse left button pressed”。当任何键按下时,标签将显示哪个键被按下。注意,在键盘事件处理函数中,我们使用了QKeyEvent的text()函数来获取按下的键的文本。
最后,最后
如果觉得有用,麻烦三连👍⭐️❤️支持一下呀,希望这篇文章可以帮到你,你的点赞是我持续更新的动力