范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文
国学影视

Qt制作一个ListView列表

  一、概述
  案例:使用Qt制作一个ListView。点击ListView的Item可以用于测试OpenCV的各种效果
  自定义一个:MainListView继承QListWidget 、MainListViewItem继承QListWidgetItem 二、代码示例
  1.自定义QListWidget
  mainlistview.h class MainListView : public QListWidget {     Q_OBJECT public:     explicit MainListView(QWidget *parent = nullptr); protected:     void mousePressEvent(QMouseEvent *event);     void mouseReleaseEvent(QMouseEvent *event);     void mouseMoveEvent(QMouseEvent *event);     void leaveEvent(QEvent *event); private:     QPoint startPoint;     MainListViewItem *theHighlightItem = nullptr;     MainListViewItem *oldHighlightItem = nullptr;     MainListViewItem *theSelectedItem = nullptr;     MainListViewItem *oldSelectedItem = nullptr;     Chapter3Option * option = new Chapter3Option();   signals:   public slots:     void updateSelectedIcon();     void onMainItemClick(QListWidgetItem *item); };
  mainlistview.cpp #include "mainlistview.h"  MainListView::MainListView(QWidget *parent) : QListWidget(parent) {     setMouseTracking(true);     //连接信号与槽函数,如果选中项发生变化则触发item图标的更新.都是当前对象发生     connect(this,&MainListView::itemSelectionChanged,this,&MainListView::updateSelectedIcon);     connect(this,&MainListView::itemClicked,this,&MainListView::onMainItemClick); }  /**  * 处理鼠标hove事件,item图标就变成hove状态  * @brief MainListView::mouseMoveEvent  * @param event  */ void MainListView::mouseMoveEvent(QMouseEvent *event){     oldHighlightItem = theHighlightItem;     theHighlightItem = static_cast(itemAt(event->pos()));     //旧的hover的item图标回复原状(条件是该item没有被选中)     //新的hover的iten图标变成hover状态(条件是该item没有被选中)     if(oldHighlightItem != theHighlightItem){        if(oldHighlightItem && !oldHighlightItem->isSelected()) oldHighlightItem->setIcon(oldHighlightItem->mIcon);        if(theHighlightItem && !theHighlightItem->isSelected()) theHighlightItem->setIcon(theHighlightItem->mIconHover);     } }  /**  * 鼠标按下(这个可以当做item的点击事件,能够正常执行)  * @brief MainListView::mousePressEvent  * @param event  */ void MainListView::mousePressEvent(QMouseEvent *event){     if(event->buttons()&Qt::LeftButton){         startPoint = event->pos();         MainListViewItem *item = static_cast(itemAt(event->pos()));         QString filePath = QFileDialog::getOpenFileName(this, tr("选择视频"), "C:Userswei.yangDownloadsopencv_res", tr("Image Files(*.jpg *.png)"));         const char *fileRealPath = filePath.toStdString().c_str();//将QString转换为char*         qDebug() <text()<<"--->"<pos:"<mPos;         switch (item->mPos) {         case 1://显示原图             option->showSrcImage(fileRealPath);             break;         case 2://像素取反             option->pixleReverse(fileRealPath);             break;         case 3://图像融合             option->imageFuse("","");             break;         case 4://调整图像亮度及对比度             option->increaseBrightnessContrastRatio(fileRealPath);             break;         case 5://绘制线、矩形、椭圆、圆、多边形、文本             option->drawShape();             break;         case 6://均值模糊:用于图像的降噪             option->showBlur(fileRealPath);             break;         case 7://高斯模糊:用于图像的降噪,其对自然界的噪声有很好的抑制作用             option->showGaussianBlue(fileRealPath);             break;         case 8://中值滤波:终止滤波用于图像的降噪,其对椒盐噪声有很好的抑制作用(黑白点)             option->showMediaBlur(fileRealPath);             break;         case 9://双边滤波:其可以很好的保留边缘的同时对平坦区域进行降噪             option->showBilateralFilter(fileRealPath);             break;         case 10://提起图像中的英文字母              option->showCleanImage(fileRealPath);             break;         case 11://形态学开操作             option->showImageOpen(fileRealPath);             break;         case 12:// 形态学闭操作             option->showImageClose(fileRealPath);             break;         case 13://形态学梯度(基本梯度):膨胀减去腐蚀              option->showMorphologicalGradient(fileRealPath);             break;         case 14://顶帽操作:相当于原图像与开操作之间的差值图像              option->showTopHat(fileRealPath);             break;         case 15://黑帽操作:相当于原图像与闭操作之间的差值图像              option->showBlackHat(fileRealPath);             break;         case 16://小案例:提取提取项目中的字母或者直线              option->showLines(fileRealPath,0);             break;         case 17://上采样:利用拉普拉斯金字塔进行图像重建             option->showPyrUp(fileRealPath);             break;         case 18://降采样:利用高斯金字塔进行降采样              option->showPyrDown(fileRealPath);             break;         case 19://高斯不同:把同一张图片再不同的参数下做高斯模糊之后的结果相减,得到的输出图像称为高斯不同             option->showGaussianDiff(fileRealPath);             break;         case 20://使用自定义卷积核filter2D              option->showCustomKernelFilter2D(fileRealPath,1);             break;         case 21://1.合并rebort和sobel的x方向梯度和y方向的梯度              option->showCustomKernelFilter2DMergeXY(fileRealPath);             break;         case 22://填充图像边缘             option->showCopyMakeBorder(fileRealPath);             break;         case 23://使用Sobel和Scharr计算图形梯度             option->showSobelAndScharr(fileRealPath);             break;         case 24://使用拉普拉斯算子显示梯度图像              option->showLaplacian(fileRealPath);             break;         case 25://边缘检测             option->showCanny(fileRealPath);             break;         }     } }  /**  * 释放鼠标  * @brief MainListView::mouseReleaseEvent  * @param event  */ void MainListView::mouseReleaseEvent(QMouseEvent *event){     //如果鼠标释放位置和单击位置相距超过5像素,则不会触发item选中     if((event->pos() - startPoint).manhattanLength() > 5) return;     MainListViewItem *item = static_cast(itemAt(event->pos()));     setCurrentItem(item);  } /**  * 处理鼠标离开后,hover图标回复正常状态  * @brief MainListView::leaveEvent  * @param event  */ void MainListView::leaveEvent(QEvent *event){     Q_UNUSED(event);     oldHighlightItem = theHighlightItem;     if(oldHighlightItem && !oldHighlightItem->isSelected()) oldHighlightItem->setIcon(oldHighlightItem->mIcon);     oldHighlightItem = theHighlightItem = nullptr;  }  void MainListView::updateSelectedIcon(){     oldSelectedItem = theSelectedItem;     theSelectedItem = static_cast(currentItem());      //之前被选中的item图标回复原样     //新被选中的item图标变成hover状态     if(oldSelectedItem != theSelectedItem){         if(oldSelectedItem) oldSelectedItem->setIcon(oldSelectedItem->mIcon);         if(theSelectedItem) theSelectedItem->setIcon(theSelectedItem->mIconHover);     } }   //这个槽函数并没有执行 void MainListView::onMainItemClick(QListWidgetItem *item){     qDebug() << "点击了item的项目"; }
  2.自定义QListWidgetItem
  mainlistviewitem.h class MainListViewItem : public QListWidgetItem {      //Q_OBJECT  //由于QListWidgetItem没有QObject属性,所以Q_OBJECT需要注释掉 public:     explicit MainListViewItem(QString itemTitle,const QIcon &icon, const QIcon &iconHover,int pos,QListWidget *parent = nullptr);     /**      * 设置item的图标      * @brief setItemIcon      * @param icon      * @param iconHover      */ //    void setItemIcon(const QIcon &icon,const QIcon &iconHover); public:     QIcon mIcon;//默认图标     QIcon mIconHover;//选中时图标     int mPos;//第一个编辑  signals:  };
  mainlistviewitem.cpp #include "mainlistviewitem.h" /** * 自定义主页ListView的Item项 * @brief MainListViewItem::MainListViewItem * @param parent */ MainListViewItem::MainListViewItem(QString itemTitle,const QIcon &icon, const QIcon &iconHover,int pos,QListWidget *parent) : QListWidgetItem(parent) { setText(itemTitle); mIcon = icon; mIconHover = iconHover; setIcon(mIcon); setSizeHint(QSize(360,47)); mPos = pos; }
  3.使用 void MainWindow::createListView(QWidget *parent){     listView = new MainListView(this);     listView->setFocusPolicy(Qt::NoFocus);  //这样可禁用tab键和上下方向键并且除去复选框     listView->setFixedHeight(320);     listView->setFont(QFont("宋体", 14, QFont::DemiBold));     listView->setFixedSize(QSize(360,480));     listView->move(0,menuBar()->height());     listView->setStyleSheet(                 "{outline:0px;}"  //除去复选框                 "MainListViewItem{background:rgb(245, 245, 247); border:0px; margin:0px 0px 0px 0px;}"                 "MainListViewItem::Item{height:40px; border:0px; padding-left:14px; color:rgba(200, 40, 40, 255);}"                 "MainListViewItem::Item:hover{color:rgba(40, 40, 200, 255);}"                 "MainListViewItem::Item:selected{background:rgb(230, 231, 234); color:rgba(40, 40, 200, 255); border-left:4px solid rgb(180, 0, 0);}"                 "QListWidget::Item:selected:active{background:rgb(230, 231, 234); color:rgba(40, 40, 200, 255); border-left:4px solid rgb(180, 0, 0);}");      new MainListViewItem("显示原图",QIcon(":res/icon_main_list.png"),QIcon(":res/icon_main_list.png"),1,listView);     new MainListViewItem(tr("像素取反"),QIcon(":res/icon_main_list.png"),QIcon(":res/icon_main_list.png"),2,listView);     new MainListViewItem(tr("图像融合"),QIcon(":res/icon_main_list.png"),QIcon(":res/icon_main_list.png"),3,listView);     new MainListViewItem(tr("调整图像亮度及对比度"),QIcon(":res/icon_main_list.png"),QIcon(":res/icon_main_list.png"),4,listView);     new MainListViewItem(tr("绘制线、矩形、椭圆、圆、多边形、文本"),QIcon(":res/icon_main_list.png"),QIcon(":res/icon_main_list.png"),5,listView);     new MainListViewItem(tr("均值模糊"),QIcon(":res/icon_main_list.png"),QIcon(":res/icon_main_list.png"),6,listView);     new MainListViewItem(tr("高斯模糊"),QIcon(":res/icon_main_list.png"),QIcon(":res/icon_main_list.png"),7,listView);     new MainListViewItem(tr("中值滤波"),QIcon(":res/icon_main_list.png"),QIcon(":res/icon_main_list.png"),8,listView);     new MainListViewItem(tr("双边滤波"),QIcon(":res/icon_main_list.png"),QIcon(":res/icon_main_list.png"),9,listView);     new MainListViewItem(tr("提取图像中的英文字母"),QIcon(":res/icon_main_list.png"),QIcon(":res/icon_main_list.png"),10,listView);     new MainListViewItem(tr("形态学开操作"),QIcon(":res/icon_main_list.png"),QIcon(":res/icon_main_list.png"),11,listView);     new MainListViewItem(tr("形态学闭操作"),QIcon(":res/icon_main_list.png"),QIcon(":res/icon_main_list.png"),12,listView);     new MainListViewItem(tr("形态学梯度(基本梯度)"),QIcon(":res/icon_main_list.png"),QIcon(":res/icon_main_list.png"),13,listView);     new MainListViewItem(tr("顶帽操作"),QIcon(":res/icon_main_list.png"),QIcon(":res/icon_main_list.png"),14,listView);     new MainListViewItem(tr("黑帽操作"),QIcon(":res/icon_main_list.png"),QIcon(":res/icon_main_list.png"),15,listView);     new MainListViewItem(tr("小案例:提取提取项目中的字母或者直线"),QIcon(":res/icon_main_list.png"),QIcon(":res/icon_main_list.png"),16,listView);     new MainListViewItem(tr("上采样"),QIcon(":res/icon_main_list.png"),QIcon(":res/icon_main_list.png"),17,listView);     new MainListViewItem(tr("降采样"),QIcon(":res/icon_main_list.png"),QIcon(":res/icon_main_list.png"),18,listView);     new MainListViewItem(tr("高斯不同"),QIcon(":res/icon_main_list.png"),QIcon(":res/icon_main_list.png"),19,listView);     new MainListViewItem(tr("使用自定义卷积核filter2D"),QIcon(":res/icon_main_list.png"),QIcon(":res/icon_main_list.png"),20,listView);     new MainListViewItem(tr("合并rebort及Sobel的x方向梯度和y方向的梯度"),QIcon(":res/icon_main_list.png"),QIcon(":res/icon_main_list.png"),21,listView);     new MainListViewItem(tr("填充图像边缘"),QIcon(":res/icon_main_list.png"),QIcon(":res/icon_main_list.png"),22,listView);     new MainListViewItem(tr("使用Sobel和Scharr计算图形梯度"),QIcon(":res/icon_main_list.png"),QIcon(":res/icon_main_list.png"),23,listView);     new MainListViewItem(tr("使用拉普拉斯算子显示梯度图像"),QIcon(":res/icon_main_list.png"),QIcon(":res/icon_main_list.png"),24,listView);     new MainListViewItem(tr("边缘检测"),QIcon(":res/icon_main_list.png"),QIcon(":res/icon_main_list.png"),25,listView);  //    connect(listView,&MainListView::itemClicked,listView,&MainListView::onMainItemClick); }//最后一步:创建ListView,然后运行就行了 createListView(this);
  三、图片演示
  原文链接:Qt制作一个ListView列表-QT开发中文网

一键下单送车上门,00后姑娘成电商全流程购车第一人12月4日,家住湖北省荆州市的消费者孙雪子,在线上确认了自己新车的车内装潢方案。这是00后孙雪子人生中的第一台车,同时,这也是中国电商全流程购车第一单。这一天,像买包包一样在网上买升级双芯IMX890后,Reno9Pro拍照如何?对比华为三星结果亮了随着移动处理器性能的提高,手机厂商已经不再执着于性能方面的内卷,从这几年机圈的情况来说,各大厂商基本都集中力量在影像方面寻求突破,这也使得大底传感器影像专用芯片影像算法等迎来春天!双12送礼怎么选?高端商务必备的华为MatePadPaper值得考虑年终加双12,正好是亲朋走访商务回馈的时候,选一份合适的礼物送给家人朋友合作伙伴很重要。那么问题来了,礼物怎么选才更好?答案也许是适合对方的,才是最好的。比如商务走访,送多年合作伙车载LED屏为何会以大为美汽车从上世纪90年代家用化以来,从调频收音机,卡带,CD,蓝牙卫星定位网络,到现在的人机交互,科技化在汽车上最显著的变化就是车载屏幕越来越大。与传统燃油车品牌还在使用的8寸,10寸阿里P9编写内部Java面试宝典!Github上线半天下载量破100W枯燥乏味的一天,又tm要开始了。早上1000,程序员毛毛带着路上买的早餐,打开24英寸的显示屏,去某论坛查一下昨天没有解决的bug。9个小时增删改查搬砖写代码的一天又要开始了。这是今日,缩量800亿!A股,传递了两个信号周四,三大指数小幅震荡,一直在零轴边缘,股票普跌,临近收盘超过3200只股票下跌。成交量缩小约800亿,北向资金没有动作了,跌停板比较多。3200点的行情,与上次3100点行情一样与京东方分手,三星会后悔吗?见智研究近日,三星宣布与老伙伴京东方分手,不再购买其显示面板,包括LCD和OLED。官方公布的原因是三星要求京东方在其营销中使用Samsung名字支付专利费,被京东方拒绝。此后市场传言,三世界杯必备好物为了这届世界杯,我们分享些好玩好吃的打开手机,到处都是世界杯的新闻走在路上,耳畔全是HayyaHayya的歌声。四年一度的足球盛会,让球迷的队伍又庞大了起来。不论真球迷还是伪球迷,都想在这场足球浪潮中,找到一些参与感A股跨境电商崛起,8只真正被低估的概念股,谁是下一个龙头股?消息面上,近日全国多省组团出海抢订单行动引发广泛关注,其中浙江1万家企业,政府组团包机出海抢订单,广东四川江苏等也有大动作值得注意的是,除了浙江外,近期,江苏四川广东福建等地组织外从武汉走出去把外资引进来,武汉商务局支持企业拓展海外营销体系随着全国多地调整优化新冠防疫政策,近期,江苏浙江四川广东福建等地组织外贸企业商务包机赴海外,拓展国际市场。12月6日,据武汉市商务局消息,光谷生物城园区企业鼎康(武汉)生物医药有限知名游资小鳄鱼8700万豪买,两连板的小商品城有何独到之处?记者龙力编辑12月7日,小商品城(600415。SH)再度涨停,成功实现了两连板,全天成交17。83亿元,截至收盘依然有15。19万手封单。盘后披露的龙虎榜数据显示,知名游资小鳄鱼
伤感文案1。我们都太普通了,没有很好的家庭背景,没有拿得出手的学历,没有很棒的工作,所以吃点苦,受点委屈也很正常。2。生活之所以生活,就是各有各的无奈,各有各的苦衷,没有为什么,不需要在别Java编程语言是否即将被淘汰?Java最终会消失吗?淘汰吗?不,不可能淘汰。Java是不可动摇的因为Java无处不在。几乎每一家财富500强公司都使用JVM来运行关键性基础设施。Java是世界各地许多课程和大学的主要课程。我们国家包一婚绝情二婚深情,这些男星怎么两副面孔?头条创作挑战赛不负责任出轨抛弃结发妻子,这些被大众盖章渣男的男星,当他们再次走入婚姻中,却变了一副模样,成了一个深情好丈夫。一个无情,一个深情,他们的两副面孔,也让人疑惑,是他们本从修理工到白龙王,周钦南的一生连修真小说都写不出来2006年,舒淇虔诚地跪拜在草地上。他用一大撮香打在舒淇的胳膊和身体,剪去舒淇的一小撮头发,告诉她是剪走衰气。再轻轻地按住舒淇的头,用朱砂红印压在其印堂上。果然,之后几年舒淇的事业羊了个羊出大事!求你们别再玩了头条群星8月榜小雷前段时间发了一篇文章,来吐槽羊了个羊的各种骚操作。比如故意把游戏难度设置得很难,有时甚至不提供能让玩家通关的牌。再通过设置看广告复活和分享给好友获得道具等方式,引RNG首战DRX,他们准备好了吗?官方回答整装完毕,蓄势待发英雄联盟S12全球总决赛,入围赛即将鸣锣开赛!LPL四号种子战队RNG,已经准备就绪。这一次入围赛,LPL和LCK的四号种子,均被分到了入围赛的B组,同组的队伍还有DRX,SGB,哈登被边缘化!第三选择都不是,恩比德抢哈登饭碗!新援状态低迷对于费城76人来说,这个休赛期过得是非常滋润,哈登的降薪续约让球队有了充足的薪金空间来进行引援操作。先后得到PJ塔克梅尔顿哈雷尔和豪斯等强援,让76人在新赛季更具竞争力。在这些引援临场状态不错斯诺克英国公开赛丁俊晖赢球晋级央视网消息斯诺克英国公开赛,丁俊晖凭借4杆50,战胜老将乔佩里,赢得本赛季个人正赛首胜赵剑波则是凭借2杆90,战胜伊恩伯恩斯,晋级第二轮。丁俊晖的对手是老将乔佩里。本场比赛,丁俊晖十一临近一起带着索尼SRSXB13迷你音响出游吧随着露营之风吹起,越来越多的年轻人选择在节假日,带上食材帐篷钓鱼竿来一场说走就走的旅行,正值金秋九月临近十一假期,正是不冷不热适合出游的好时节,享受愉快假日生活的同时怎么能不来点音你们有掉头发吗?昨天,晚上出去把留了一年多的头发剪了本想着冬天头发留长点后做个发型,美美的过个年,唉,没办法头发掉得太厉害,每次洗完头轻轻一梳就掉了一地,卫生间简直就是灾难现场,说真的,现在我都有马朝旭中国推动全球治理体系变革不是什么另起炉灶,而是使其更加公正合理中国青年报客户端北京9月29日电(中青报中青网记者胡文利)9月29日,在中国这十年系列主题第36场新闻发布会上,有记者提问过去十年,中国积极参与全球治理体系变革和建设,但也有人置疑