Qt之定时器、重绘窗口、窗口缩放、截屏、截图
来源:互联网 发布:文字复制软件 编辑:程序博客网 时间:2024/06/01 07:55
--------------- MyWidget.h ------------#ifndef MYWIDGET_H#define MYWIDGET_H#include<QMouseEvent>#include <QWidget>class MyWidget : public QWidget{ Q_OBJECTpublic: explicit MyWidget(QWidget *parent = 0); //重载一个函数,基类中该函数是一个虚函数;因此重载该函数之后发生多态操作; void mousePressEvent(QMouseEvent *ev); //所有的这些事件都有一个共同的父类,QEvent; //移动窗口 void mouseMoveEvent(QMouseEvent *ev); //鼠标释放 void mouseReleaseEvent(QMouseEvent *ev); /************************/ //判断键盘有无按键按下 void keyPressEvent(QKeyEvent *ev); //重绘窗口 void paintEvent(QPaintEvent *ev); //窗口缩放 void resizeEvent(QResizeEvent *ev); //定时器消息 void timerEvent(QTimerEvent *ev); //所有发给MyWidget对象的event,都会经过event函数 bool event(QEvent *ev); int T1; int T2; //鼠标原始位置 QPoint posMouseOrigin;signals:public slots:};#endif // MYWIDGET_H--------------- MyWidget.cpp ------------#include "mywidget.h"#include<QDebug>#include<QApplication>#include<QWidget>#include<QScreen>#include<QPixmap>#include<QPoint>#include<QEvent>#include<QPainter>#include<QMouseEvent>MyWidget::MyWidget(QWidget *parent) : QWidget(parent) { this->setWindowFlags(Qt::FramelessWindow Hint); //去掉标题栏; T1 = startTimer(1000);//设置时钟定时器 T2 = startTimer(5000); //5000ms}//获取鼠标的按下操作void MyWidget::mousePressEvent(QMouseEvent *ev){ this->posMouseOrigin = QCursor::pos(); //cursor是一个光标类;}//获得鼠标移动的操作void MyWidget::mouseMoveEvent(QMouseEvent *ev){ QPoint ptMouseNow = QCursor::pos(); QPoint ptDelta = ptMouseNow - this->posMouseOrigin; move(this->pos() + ptDelta); posMouseOrigin = ptMouseNow;}//获得鼠标的释放操作;void MyWidget::mouseReleaseEvent(QMouseEvent *ev){}//键盘按下事件(键盘消息)void MyWidget::keyPressEvent(QKeyEvent *ev){ /*判断按下的键值,按下小写/大写-->大写 *数字则仍然按照ASCII规则,某些键是无法 * 用ASCII键表示,如Enter,Shift... */ qDebug()<<ev->key(); //判断是否友伴随这ctrl键 qDebug()<<ev->modifiers(); //判断是第一个按下的值还是后面连续的值 qDebug()<<ev->isAutoRepeat();}//重绘窗口void MyWidget::paintEvent(QPaintEvent *ev){ QPainter p(this); //画一条直线(两点确定一条直线) p.drawLine(QPoint(0,0),QPoint(200,200));}//窗口放大、缩小void MyWidget::resizeEvent(QResizeEvent *ev){}//定时器消息void MyWidget::timerEvent(QTimerEvent *ev){ //允许同时有多个信号产生,不同的信号返回值不同; if(T1 == ev->timerId()) { qDebug()<<"T1 time out."; } else if(T2 == ev->timerId()) { qDebug()<<"T2 time out."; killTimer(T2); //销毁定时器T2 } qDebug()<<"Time Out. ";}//所有发给MyWidget对象的event,都会经过event函数bool MyWidget::event(QEvent *ev){ //判断鼠标是否被按下 if(ev->type()==QEvent::MouseButtonPress ) { qDebug()<<"Mouse press in event."; } //将消息处理流程,还给Qt框架 return QWidget::event(ev);}//窗口截屏:点击鼠标完成截图操作void MyWidget::paintEvent(QPaintEvent *ev){ QPixmap pixmap(width(),height()); QPainter p; this->render(&pixmap); pixmap.save("D:\\code\\1.png");}//截屏(仍是截图操作)操作void MyWidget::paintEvent(QPaintEvent *ev){ //QList<QScreen*> screen = app->screens(); //多屏(分屏) QScreen *screen = qApp->primaryScreen(); //主屏 QPixmap pixmap = screen->grabWindow(this->winId());//可以截窗口 pixmap.save("D:\\code\\1.png");}//截屏(整个屏幕) #include<QDesktopWidget>void MyWidget::paintEvent(QPaintEvent *ev){ //主屏 QScreen *screen = qApp->primaryScreen(); //代表桌面的窗口 QDesktopWidget *desktop = qApp->desktop(); //截屏 QPixmap pixmap = screen->grabWindow(desktop->winId()); pixmap.save("D:\\code\\1.png");}--------------- main.c ------------------#include<QApplication>#include<QWidget>#include<QDebug>#include"mywidget.h"int main(int argc,char **argv){ QApplication app(argc,argv); //功能新的需求:不再使用框架提供的窗口,自定义一个窗口; //派生类; MyWidget w; //MyWidget类继承于基类QWidget类; w.show(); return app.exec();}
阅读全文
3 0
- Qt之定时器、重绘窗口、窗口缩放、截屏、截图
- Qt:自定义窗口之窗口缩放
- 窗口截图
- 窗口截图
- QT实现窗口缩放打开与关闭
- Qt去掉窗口标题栏实现移动缩放
- Qt无边框窗口,自由缩放窗口大小
- Qt之窗口部件
- QT之窗口移动
- QT之窗口
- 开发界面之窗口边框重绘
- 关于窗口重绘
- 关于窗口重绘
- 关于窗口重绘
- 窗口重绘函数
- MFC 窗口重绘
- 窗口重绘相关
- 窗口重绘
- 方格填数
- 河南省第十届acm省赛-最小秘钥——个人c++解
- JavaScript基础
- word文档中如何让正文分栏但是脚注不分栏
- java并发编程-1.1线程的创建方法及比较
- Qt之定时器、重绘窗口、窗口缩放、截屏、截图
- require "socket" 引发的一些问题
- 音频单元组件服务参考(Audio Unit Component Services Reference)
- EA&UML日拱一卒--序列图(Sequence Diagram)::门
- Doves and bombs UVA
- 内核资料:ALSA资料
- android用视频当做背景
- 算法——图之有向图
- 本地的vs项目设置成带域名的项目