Qt事件与信号(一)——重新实现事件处理器
来源:互联网 发布:plsql查看数据库表 编辑:程序博客网 时间:2024/06/08 00:10
目录
- 目录
- 前言
- 事件和信号
- 使用信号与槽的方式
- 重新实现事件处理器
- 重新实现paintEvent函数对事件进行处理
- 总结
前言
Qt中事件应该是非常重要的一部分,对于重要的部分,记录下来!对于不经常用的,用到的时候再说!
学习!分享!感谢!
事件和信号
本部分参考一去二三里,引用如下:
在Qt中,事件就是对象,派生自QEvent抽象类,用来表示在应用程序中发生的事件,或是应用程序需要处理的外部活动产生的事件。也就是用户操作可以产生事件,系统自身也可以产生事件。
事件如下:
有一些事件对应有信号,可以用信号与槽的方式处理,也可以直接处理事件。但是有些事件。比如:paintEvent
和timerEvent
,我们就只能自己编程进行处理了。
使用信号与槽的方式
从上图可以知道,鼠标、键盘的按下都可以看作是发出clicked
信号,所以我们可以对这类事件采用信号与槽的方式进行处理。
- main.cpp
#include "dialog.h"#include <QApplication>int main(int argc, char *argv[]){ QApplication a(argc, argv); Dialog w; w.show(); return a.exec();}
- dialog.h
#ifndef DIALOG_H#define DIALOG_H#include <QDialog>#include "sibutton.h"namespace Ui {class Dialog;}class Dialog : public QDialog{ Q_OBJECTpublic: explicit Dialog(QWidget *parent = 0); ~Dialog();private: Ui::Dialog *ui; siButton* sibutton;private slots: void siButtonClicked();};#endif // DIALOG_H
- dialog.cpp
#include "dialog.h"#include "ui_dialog.h"#include <QtWidgets>Dialog::Dialog(QWidget *parent) : QDialog(parent), ui(new Ui::Dialog){ ui->setupUi(this); sibutton = new siButton; sibutton->setText(tr("Hello")); connect(sibutton, SIGNAL(clicked()), this, SLOT(siButtonClicked())); ui->horizontalLayout->addWidget(sibutton);}Dialog::~Dialog(){ delete ui;}void Dialog::siButtonClicked(){ QMessageBox::information(this, tr("Test"), tr("Hello Signal and slots"));}
使用信号与槽的方式,是在界面中对程序进行处理,也就是button只是作为一个对象,点击的事件应该是被界面接收,然后在界面中进行处理。
重新实现事件处理器
- sibutton.h
#ifndef SIBUTTON_H#define SIBUTTON_H#include <QPushButton>class siButton : public QPushButton{public: siButton();protected: void keyPressEvent(QKeyEvent*);};#endif // SIBUTTON_H
- sibutton.cpp
#include "sibutton.h"#include <QtWidgets> siButton::siButton(){}void siButton::keyPressEvent(QKeyEvent *){ QMessageBox::information(this, tr("Test"), tr("Hello, keyPressEvent"));}
使用事件处理的方式,是在继承QPushButton
的文件中对点击事件进行处理,我认为也就是在siButton
这个控件中对键盘按下事件进行处理。
重新实现paintEvent
函数对事件进行处理
- dialog2.h
#ifndef DIALOG2_H#define DIALOG2_H#include <QDialog>#include "siWidget.h"namespace Ui {class Dialog2;}class Dialog2 : public QDialog{ Q_OBJECTpublic: explicit Dialog2(QWidget *parent = 0); ~Dialog2();private: Ui::Dialog2 *ui;private: siWidget *siwidget;};#endif // DIALOG2_H
- dialog2.cpp
#include "dialog2.h"#include "ui_dialog2.h"Dialog2::Dialog2(QWidget *parent) : QDialog(parent), ui(new Ui::Dialog2){ ui->setupUi(this); siwidget = new siWidget; ui->horizontalLayout->addWidget(siwidget); this->resize(800, 600);}Dialog2::~Dialog2(){ delete ui;}
- siwidget.h
#ifndef SIWIDGET_H#define SIWIDGET_H#include <QWidget>#include <QPaintEvent>class siWidget : public QWidget{ Q_OBJECTpublic: explicit siWidget(QWidget *parent = 0);signals:public slots:protected: void paintEvent(QPaintEvent*);};#endif // SIWIDGET_H
- siwidget.cpp
#include "siwidget.h"#include <QtWidgets>siWidget::siWidget(QWidget *parent): QWidget(parent){ update();}void siWidget::paintEvent(QPaintEvent* ){ QPainter painter(this); QPixmap pix; pix.load("images/0.bmp"); // note: this should be with elf file painter.drawPixmap(0, 0, pix);}
因为这个程序中用到了0.bmp
,这时候如果没有时候资源文件(好像也没法使用资源文件),我们的文件就必须和可执行程序放在一起。
总结
程序很简单!本来感慨了一下!但是浏览器突然崩溃了!然后保存的都木有了!我明明保存了!上帝有派ZZ来考验我!气!!!
阅读全文
0 0
- Qt事件与信号(一)——重新实现事件处理器
- QT事件处理 (一)之 重载事件处理器
- Qt中信号与事件的小结
- QT 事件和信号
- Qt 事件和信号
- Qt事件处理器和事件过滤器实例
- Qt事件处理器和事件过滤器实例
- Qt事件处理器和事件过滤器实例
- Qt事件处理器和事件过滤器实例
- QT笔记(1)——信号&槽机制,事件
- Vue学习—事件处理器
- QT源码之Qt信号槽机制与事件机制
- python3+PyQt5 重新实现QT事件处理程序
- Qt捕捉窗口关闭事件与信号的捕捉
- Qt中消息信号与事件的总结
- QT中的事件机制与信号-槽机制
- Qt捕捉窗口关闭事件与信号的捕捉
- QT 中QDateEdit 的时间改变事件---信号与槽
- eclipse java通过jackess操作access数据库
- callbacks
- 输入输出流:实验1
- Fear the REAPER A System for Automatic Multi-Document Summarization with Reinforcement Learning
- 黑客入侵监狱系统放囚犯,换来十年监禁、25 万美元罚款
- Qt事件与信号(一)——重新实现事件处理器
- 解决ubuntu下提示未信任的应用启动器的问题
- Session
- 排序输出
- java怎么用代码获取类所在的包名
- 【Java】1.BlockQueue及简易版生产者消费者模型
- cf320b
- laravel session多域名共享
- 【PHP】Windows下最直接最简单查看PHP版本的方法