社区
其他技术讨论专区
帖子详情
怎么用qt实现一个直方图啊
weixin_38051999
2019-09-19 03:01:55
如题 求教给为高手了!
...全文
367
8
打赏
收藏
怎么用qt实现一个直方图啊
如题 求教给为高手了!
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用AI写文章
8 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
weixin_38114312
2019-09-19
打赏
举报
回复
给你个代码你看:H文件/* * HistogramView.h * * Created on: 2009-9-8 * Author: xlttap */#ifndef HISTOGRAMVIEW_H_#define HISTOGRAMVIEW_H_#include <QAbstractItemView>#include <QModelIndex>#include <QRect>#include <QRegion>#include <QList>class QWidget;class QPoint;class QMouseEvent;class QPaintEvent;class QItemSelectionModel;class QItemSelection;class HistogramView : public QAbstractItemView{ Q_OBJECTpublic: HistogramView(QWidget *parent = 0); virtual ~HistogramView();public: QRect visualRect(const QModelIndex &index) const; void scrollTo(const QModelIndex &index,ScrollHint hint = EnsureVisible); QModelIndex indexAt(const QPoint &point) const; void paintEvent(QPaintEvent *event); void mousePressEvent(QMouseEvent *event); void setSelectionModel(QItemSelectionModel *selectionModel); QRegion itemRegion(QModelIndex index);protected slots: void dataChanged(const QModelIndex &topLeft,const QModelIndex &bottomRight); void selectionChanged(const QItemSelection &selected,const QItemSelection &deselected);protected: QModelIndex moveCursor(QAbstractItemView::CursorAction cursorAction,Qt::KeyboardModifiers modifiers); int horizontalOffset() const; int verticalOffset() const; bool isIndexHidden(const QModelIndex &index) const; void setSelection(const QRect &rect,QItemSelectionModel::SelectionFlags flags); QRegion visualRegionForSelection(const QItemSelection &selection) const;private: QItemSelectionModel *selections; QList<QRegion> listRegionM; QList<QRegion> listRegionF; QList<QRegion> listRegionS;};#endif /* HISTOGRAMVIEW_H_ */CPP文件/* * HistogramView.cpp * * Created on: 2009-9-8 * Author: xlttap */#include <QtGui>#include "HistogramView.h"void HistogramView::paintEvent(QPaintEvent *event){ QPainter painter(this->viewport()); painter.setPen(Qt::black); int x0 = 40; int y0 = 250; // draw y axis painter.drawLine(x0,y0,40,30); painter.drawLine(38,32,40,30); painter.drawLine(40,30,42,32); painter.drawText(20,30,tr("number")); for(int i = 0; i < 5; i++) {// painter.drawLine(-1,-i*50,1,-i*50);// painter.drawText(-20,-i*50,tr("%1").arg(i*5)); painter.drawLine(x0-2,y0-i*50,x0,y0-i*50); painter.drawText(x0-20,y0-i*50,tr("%1").arg(i*5)); } // draw x axis painter.drawLine(x0,y0,540,250); painter.drawLine(538,248,540,250); painter.drawLine(540,250,538,252); painter.drawText(545,250,tr("department")); int row; // name of variable of x axis int posD = x0 + 20; for(row = 0; row < model()->rowCount(rootIndex()); row++) { QModelIndex index = model()->index(row,0,rootIndex()); QString dep = model()->data(index).toString(); painter.drawText(posD,y0+20,dep); posD += 50; } // histogram of male int posM = x0+20; for(row = 0; row < model()->rowCount(rootIndex());row++) { bool ok; QModelIndex index = model()->index(row,1,rootIndex()); int male = model()->data(index).toInt(&ok); int width = 10; if(selections->isSelected(index)) painter.setBrush(QBrush(Qt::blue,Qt::Dense3Pattern)); else painter.setBrush(Qt::blue); painter.drawRect(QRect(posM,y0-male*10,width,male*10)); QRegion regionM(posM,y0-male*10,width,male*10); listRegionM << regionM; posM += 50; } // histogram of female int posF = x0+30; for(row = 0; row < model()->rowCount(rootIndex());row++) { QModelIndex index = model()->index(row,2,rootIndex()); int female = model()->data(index).toInt(); int width = 10; if(selections->isSelected(index)) { painter.setBrush(QBrush(Qt::red,Qt::Dense3Pattern)); } else { painter.setBrush(Qt::red); } painter.drawRect(QRect(posF,y0-female*10,width,female*10)); QRegion regionF(posF,y0-female*10,width,female*10); listRegionF << regionF; posF += 50; } // histogram of retire int posS = x0+40; for(row = 0; row < model()->rowCount(rootIndex());row++) { QModelIndex index = model()->index(row,3,rootIndex()); int sum = model()->data(index).toInt(); int width = 10; if(selections->isSelected(index)) painter.setBrush(QBrush(Qt::green,Qt::Dense3Pattern)); else painter.setBrush(Qt::green); painter.drawRect(QRect(posS,y0-sum*10,width,sum*10)); QRegion regionS(posS,y0-sum*10,width,sum*10); listRegionS << regionS; posS += 50; }}void HistogramView::dataChanged(const QModelIndex &topLeft,const QModelIndex &bottomRight){ QAbstractItemView::dataChanged(topLeft,bottomRight); viewport()->update();}void HistogramView::setSelectionModel(QItemSelectionModel *selectionModel){ selections = selectionModel;}void HistogramView::selectionChanged(const QItemSelection &selected,const QItemSelection &deselected){ viewport()->update();}void HistogramView::mousePressEvent(QMouseEvent *event){ QAbstractItemView::mousePressEvent(event); setSelection(QRect(event->pos().x(),event->pos().y(),1,1),QItemSelectionModel::SelectCurrent);}void HistogramView::setSelection(const QRect &rect,QItemSelectionModel::SelectionFlags flags){ int rows = model()->rowCount(rootIndex()); int columns = model()->columnCount(rootIndex()); QModelIndex selectedIndex; for(int row = 0; row < rows ; row ++) { for(int column = 0; column < columns; column++) { QModelIndex index = model()->index(row,column,rootIndex()); QRegion region = itemRegion(index); if(!(region.intersected(contentsRect()).isEmpty())) selectedIndex = index; } } if(selectedIndex.isValid()) selections->select(selectedIndex,flags); else { QModelIndex noIndex; selections->select(noIndex,flags); }}QRegion HistogramView::itemRegion(QModelIndex index){ QRegion region; if(index.column() == 1) // male region = listRegionM[index.row()]; if(index.column() == 2) // female region = listRegionF[index.row()]; if(index.column() == 3) // retire region = listRegionS[index.row()]; return region;}QModelIndex HistogramView::indexAt(const QPoint &point) const{ QPoint newPoint(point.x(),point.y()); QRegion region; foreach(region,listRegionM) { // Male Column if(region.contains(newPoint)) { int row = listRegionM.indexOf(region); QModelIndex index = model()->index(row,1,rootIndex()); return index; } } foreach(region,listRegionF) { // Female Column if(region.contains(newPoint)) { int row = listRegionF.indexOf(region); QModelIndex index = model()->index(row,2,rootIndex()); return index; } } foreach(region,listRegionS) { // Retire Column if(region.contains(newPoint)) { int row = listRegionS.indexOf(region); QModelIndex index = model()->index(row,3,rootIndex()); return index; } } return QModelIndex(); //null, returns an invalid model index}QModelIndex HistogramView::moveCursor(QAbstractItemView::CursorAction cursorAction,Qt::KeyboardModifiers modifiers) {}int HistogramView::horizontalOffset() const {}int HistogramView::verticalOffset() const {}bool HistogramView::isIndexHidden(const QModelIndex &index) const {}QRect HistogramView::visualRect(const QModelIndex &index) const {}void HistogramView::scrollTo(const QModelIndex &index, ScrollHint hint) {}QRegion HistogramView::visualRegionForSelection(const QItemSelection &selection) const {}HistogramView::HistogramView(QWidget *parent) : QAbstractItemView(parent){ // TODO Auto-generated constructor stub}HistogramView::~HistogramView() { // TODO Auto-generated destructor stub}效果:
图片:snap9.jpg
weixin_38126127
2019-09-19
打赏
举报
回复
mark
Qt
获取图像
直方图
并显示
获取图像
直方图
,绘制到界面,
qt
5.12+mingw64环境开发,demo很简单,只是为了演示从QImage中取得像素级数据,供有需者下载
Qt
QImage+QCustomPlot
实现
图像灰度
直方图
Qt
实现
一个
图像的灰度
直方图
。使用QImage读取图像,QCustomPlot
实现
直方图
。
Qt
实现
一个
图像的灰度
直方图
。使用QImage读取图像,QCustomPlot
实现
直方图
。
QT
平台下的
直方图
匹配
QT
平台下的
直方图
匹配 包含
一个
简单的界面 左边是源图 右边是要在源图中检测出得图片
Qt
+OpenCV2.4.4
实现
直方图
均衡化增强图像对比度(Mat结构
实现
)
注意:.pro工程文件中的头文件和库文件目录配置因人而异,自己手动改一下。 包括了基于Mat结构的通道分割split和合并merge操作,可以参考下。
QT
opencv
直方图
插件
通过
QT
编写基于opencv的
直方图
插件,使用时重新设置一下opencv路径
其他技术讨论专区
473
社区成员
791,199
社区内容
发帖
与我相关
我的任务
其他技术讨论专区
其他技术讨论专区
复制链接
扫一扫
分享
社区描述
其他技术讨论专区
其他
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章