Qt之定时器、重绘窗口、窗口缩放、截屏、截图
2017-05-24 20:00
211 查看
--------------- MyWidget.h ------------ #ifndef MYWIDGET_H #define MYWIDGET_H #include<QMouseEvent> #include <QWidget> class MyWidget : public QWidget { Q_OBJECT public: 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(); }
相关文章推荐
- 1.关于QT中的Graphics绘图,定时器,动画,将窗口中的内容打印到图片上,打印机,打印预览
- winform 在mdi窗口重绘界面时,mdi挡住主窗体,导致鼠标拖动缩放窗体大小失效的解决方法随笔
- qt 窗口的缩放和滚动条的使用
- QT中使用定时器来截图
- QT 窗口背景图片设置(图片自动缩放)
- Qt 实现在隐藏标题栏情况下,窗口的缩放(未成功)
- Qt中窗体控件按照比例缩放,自适应窗口大小进行布局
- 1.关于QT中的Graphics绘图,定时器,动画,将窗口中的内容打印到图片上,打印机,打印预览
- Qt:自定义窗口之窗口缩放
- Qt无边框窗口的移动、拉伸边框、鼠标滚轮缩放大小
- QT_无边框窗口拖动缩放
- Qt 控件随窗口缩放
- QT——设置窗口的固定大小、QProcess、定时器事件、QString::arg、系统时间、QPixmap 和 QImage 区别
- QT实现窗口缩放打开与关闭(重叠窗口,太有意思了)
- 使用Qt作窗口截屏(含源码)
- Qt去掉窗口标题栏实现移动缩放
- <Qt C++>无边框窗口实现拖拽缩放
- 【Qt编程】无边框窗口的缩放与拖动
- Qt5:Qt中屏幕或窗口截图功能的实现
- Qt5:Qt中屏幕或窗口截图功能的实现