Qt绘制 QImage、QPixmap/事件处理
来源:互联网 发布:怎么p淘宝的代收货 编辑:程序博客网 时间:2024/05/16 12:57
1. QImage、QPixmap、QPicture、QBitmap
在界面上绘制图片是遇到了问题,就是在拖动界面的时候会看到背景默认的白色画刷,而且感觉程序卡卡的,因为这里用的QImage加载的图片,然后绘制到widget上面。
后面改用了QPixmap加载图片进行绘制,发现好了很多,绘制的速度很快,也没有出现卡顿的现象了。
查了一下Qt Asistant, 然后对了里面几种图的类有了一个大致的了解,
QImage 提供设备无关图,可以对图片的每一像素进行访问,可以绘制在设备上面;那么利用它可以做一些图像的处理,他的绘制在设备上面的效率不如QPixmap
QPixmap 是提供离屏图像,用于绘制在设备上面,速度是很快的。
QPicture 这个类可以记录所绘制的内容(QPainter)保存为图像,同时可以讲图像绘制到设备上通过QPinter
QBitmap 这个类是继承 QPixmap,色彩深度为1,超过1的则会出现抖动现象这里可能对图像处理认识应该知道,关于图像处理我也是小白
前面三个类都是从QPaintDevice类派生而来 (ps: Qt中类真TM多啊)
2.在用布局的时候,建立工程的时候继承的是QMainWindow,然后后面利用setLayout的时候布局发现,不能布局而且控件都不能显示出来,这里就了解了QMainWindow的组成
用了Qt助手里面的一张图,QMainWindow有Menu bar、Toolbar、Dock Widget、idget、Status bar几个组成,当然你也可以去掉他们。布局的时候应该在Widget控件中,设置Widget的布局,即是可以用中间的 central Widget 来设置,既可以正常的完成显示所设置的布局。所建立的工程利用 ui designer设计的的则可以用 ui.centralWidget->setLayout(mainLayout),这里只是举个例子,具体要根据自己的代码情况来设置。
3. 在自绘的时候,会有鼠标离开的事件,发现有 mouseMoveEvent、 mousePressEvent、mouseReleaseEvent 等鼠标事件,不过就是没有mouseLeaveEvent ,然后我就去src源码文件夹找了 QWidget 的源码实现,这里截取了部分源码,发现都是在 event() 这个函数中事件的,然后根据不同的消息,做不同的处理。哦,原来明白了,可以去QEvent这个类中,去看不同的消息,比如
鼠标双击事件 QEvent::MouseButtonDblClick
鼠标单击事件 QEvent::MouseButtonPress
鼠标释放事件 QEvent::MouseButtonRelease
鼠标移动事件 QEvent::MouseMove
可以根据不同的消息类型做不同的事件处理,也应该知道这个event()函数肯定是个虚函数,这样我们可以在子类中重写自己的事件处理。
bool QWidget::event(QEvent *event){ Q_D(QWidget); // ignore mouse events when disabled if (!isEnabled()) { switch(event->type()) { case QEvent::TabletPress: case QEvent::TabletRelease: case QEvent::TabletMove: case QEvent::MouseButtonPress: case QEvent::MouseButtonRelease: case QEvent::MouseButtonDblClick: case QEvent::MouseMove: case QEvent::TouchBegin: case QEvent::TouchUpdate: case QEvent::TouchEnd: case QEvent::ContextMenu:#ifndef QT_NO_WHEELEVENT case QEvent::Wheel:#endif return false; default: break; } } switch (event->type()) { case QEvent::MouseMove: mouseMoveEvent((QMouseEvent*)event); break; case QEvent::MouseButtonPress: // Don't reset input context here. Whether reset or not is // a responsibility of input method. reset() will be // called by mouseHandler() of input method if necessary // via mousePressEvent() of text widgets.#if 0 resetInputContext();#endif mousePressEvent((QMouseEvent*)event); break; case QEvent::MouseButtonRelease: mouseReleaseEvent((QMouseEvent*)event); break; case QEvent::MouseButtonDblClick: mouseDoubleClickEvent((QMouseEvent*)event); break; case QEvent::NonClientAreaMouseButtonPress: { QWidget* w; while ((w = QApplication::activePopupWidget()) && w != this) { w->close(); if (QApplication::activePopupWidget() == w) // widget does not want to disappear w->hide(); // hide at least } break; }
...还有很多的
}
初学Qt,,觉得Qt很强大的,跨平台,而且是开源的,不过发现用的人却不是特别的多,还不如MFC的多,可能是微软帝国太强大了吧。
慢慢的学习,慢慢的提高 .....
- Qt绘制 QImage、QPixmap/事件处理
- QT QPixmap、QBitmap、QImage
- Qt图片绘图类QPixmap/QImage/QPicture
- Qt中图像类QImage,QPixmap
- QT QImage QPixmap QBitmap QPicture 区别
- QT——设置窗口的固定大小、QProcess、定时器事件、QString::arg、系统时间、QPixmap 和 QImage 区别
- Qt的4个图像类QImage/QPixmap/QBitmap/QPicture
- Qt的4个图像类QImage/QPixmap/QBitmap/QPicture
- Qt的4个图像类QImage/QPixmap/QBitmap/QPicture .
- Qt的4个图像类QImage/QPixmap/QBitmap/QPicture
- Qt的4个图像类QImage/QPixmap/QBitmap/QPicture .
- QT【绘图】 QPaintDevice 总结:QPixmap、QImage、QBitmap和QPicture
- Qt的4个图像类QImage/QPixmap/QBitmap/QPicture
- Qt的4个图像类QImage/QPixmap/QBitmap/QPicture
- Qt的4个图像类QImage/QPixmap/QBitmap/QPicture
- Qt编程20:QPixmap,QImage,QBitmap的简单使用
- Qt的4个图像类QImage/QPixmap/QBitmap/QPicture
- Qt的4个图像类QImage/QPixmap/QBitmap/QPicture
- 电路设计基本知识收集
- sdut数据结构上机实验之顺序查找
- 大学里如何学习 ?
- window内存管理
- 关于网络中常使用的基本命令
- Qt绘制 QImage、QPixmap/事件处理
- C的另类话题
- 数据结构实验之图论二:基于邻接表的广度优先搜索遍历(BFS+前向星)
- 遇见你是一个秘密--牛腩新闻发布系统尾声
- zookeeper原理
- CodeIgniter框架同时连接多个数据库
- NYOJ47过河问题
- 1、Intent和IntentFilter详解
- 1012. 数字分类 (20) (数学啊 ZJU_PAT)