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

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开发中文网

挑食不是一件好事孩子挑食怎么办孩子挑食,是每位家长都比较烦恼的事情,老人常说我们那一代,吃肉都是过年才能吃上的,现在的小孩啊,有的吃还挑,孩子挑食像是一件棘手的事情。小孩挑食是会影响身体健康,以及多动症孩子怎么写个作业都这么困难?打骂实为下策每到开学季,就有不少多动症孩子的家长向我大倒苦水。这到底是怎么一回事儿呢?根据这些家长的说法,才知道原来因为疫情原因,孩子大多数时间就一直在家待着。整天在家闲散惯了,学习非常困难,爱敏思赖氨酸有助于长高吗?爱敏思赖氨酸有助于长高吗?赖氨酸对儿童的生长发育有促进作用,但是仅仅使用赖氨酸并不能使儿童长个子。赖氨酸是一种人体必需的氨基酸,赖氨酸有促进食欲提高消化能力的作用,同时对钙的吸收很少儿舞蹈学习究竟要不要注重舞蹈基本功?几乎没有父母准备让他们的孩子从一开始就开始学习舞蹈。但事实上,许多舞蹈培训机构的课程都是一样的无论孩子多大,开始学习舞蹈的第一课都是练习所谓的基本技能,如腿胯部腰部等,结果是让孩子林书豪自宣加盟中国台湾P联赛高雄钢铁人队将与弟弟同室操戈北京时间1月26日,农历正月初五,林书豪通过个人社交媒体宣布,将正式加盟中国台湾PLG联赛球队高雄钢铁人队,这也意味着这位美籍华裔球星将正式告别CBA,开启一段全新的篮球旅程。林书穿国产丢脸?你应该自豪的13个中国服装品牌!我们经常收到一些读者回复说想要了解一下中国的服装品牌。其实,我们国家很早以前就已经是纺织大国,江南地区的纺织业在明代时就已经非常发达了。今天我们就盘点了一下穿出去不丢面儿的13个中比亚迪卫冕2022年全球新能源汽车销冠,扣非净利润预计暴增11倍红星资本局1月30日消息,比亚迪(002594。SZ)晚间发布2022年度业绩预告,预计归属于上市公司股东的净利润160亿元170亿元,同比增长425。42458。26扣非净利润1保罗克鲁格曼经济学家为什么错得如此离谱?原创李井奎按此文克鲁格曼写于2008年大危机之后,题目中的经济学家其实是特指自20世纪80年代以来的宏观经济学家,具体来说,就是研究经济波动的一批主流经济学者。不过,此文中的许多批想拥有一颗强大的心脏?医生给出8条建议,改善心血管健康拥有一颗强大的心脏,是每个人的梦想。心脏是人体中最重要的器官之一,它是人体的动力源,负责将血液循环到全身,给每个器官提供养分和氧气。拥有一颗强大的心脏,不仅能让我们更健康,还能帮助胡某宇的遗体找鸡被发现是不实信息!粮仓管理员刘大爷说出实情胡某宇事件已经告一段落,但是关于此事的热度并没有消退,大家还有很多的疑问?而之所以有这些疑问,多半是因为不太了解事情的经过,道听途说,被带了节奏。胡某宇的遗体到底是怎么发现的之前我剑侠情缘三骚话的魅力!(持续更新)个人认为骚话是剑三玩家交际中不可或缺的一部分,所谓骚话就如我们说的幽默,同样的内容用幽默的话说出来不断能给人快乐,自己也会获益匪浅。君不见世界频道加好友的都要骚话精,师傅收徒也要骚
女儿吐槽父姓太难写,征求妈妈换个姓王的爸爸,真是令人哭笑不得人类幼崽实在太难伺候了,童言无忌的他们令人好气又好笑。在河南商丘,一个萌娃睡着睡着就哭醒了。女孩妈妈耐心询问女儿是怎么回事?女儿吐槽张姓太难写,征求妈妈换一个姓王的爸爸。女孩妈妈十一碗剩米饭致一家三口食物中毒医生提醒当心隔夜食物引起炒饭综合症医生,快看看我的孩子!近日,西安秦皇医院儿科门诊,一位妈妈带着两个孩子匆忙赶来,5岁的女孩和11岁的男孩捂着肚子,满头冷汗,疼得不停抽泣。陈昭医生立刻安排一家三口就诊。经询问得知,藏在老港剧中的内娱美人,都是人间绝色,王菲最飒今年的港姐冠军诞生,28岁的林钰洧获得冠军,被嘲颜值不行。遥想曾经一波又一波的港姐,支撑起港剧的风光,也留给观众无数童年回忆。但其实,在古早港剧中,还藏着不少内地的美人儿年轻时的张鼓励张智霖去玩,提醒他做安全措施,袁咏仪娇妻言论毁三观张智霖因为在披荆斩棘2竞赛节目表演办婚礼,直接翻了个大车。忍了许久的网友们干脆一次性爆发,至今没有要停歇的意思,甚至越演越烈,还扒出了袁咏仪张智霖过往,发现两人根本没有表面宣传的那相差9岁!杨幂许凯姐弟恋新剧定档先婚后爱,含大量花式拥抱亲吻戏份10月10日,杨幂和小9岁许凯主演的电视剧爱的二八定律发布预告,官宣定档。杨幂许凯剧照电视剧爱的二八定律带话题官宣定档10月13日。预告片中,二人上演先婚后爱的姐弟恋,杨幂饰演被结ampampquot迫守贞操ampampquot奚梦瑶讨好秦舒培排挤何穗,拿捏王嘉尔母凭子贵嫁豪门向太一句在香港摆过酒席才算正式夫妻不仅为儿媳郭碧婷撑了腰更让沦为生育机器的奚梦瑶无地自容2017年奚梦瑶在上海惊天一摔意外将其摔进了赌王家门然而在查出腹中为男胎以前婆婆对她的评价一长得如花似玉,却输在脖子丑上,这6位女星的短板整都没法整头条创作挑战赛在娱乐圈中,有不少女星都拥有漂亮的天鹅颈,这自然让她们增色不少,甚至可以瞬间秒杀她人。毕竟人们的五官可以修饰,但脖子的长短和粗细,却是很难改变的。所以也有不少女星吃了日媒爆王思聪花300万中介费,与未成年人睡觉,女方是知名女星近日,日媒曝出猛料大瓜,称知名富二代王思聪曾花钱与未成年的日本女明星滨边美波等人发生关系,引起了不少人的关注与热议。从网上的爆料内容来看,目前王思聪与女星们的八卦在日本已经大火了,Undecember怎么下载,恶月十三在哪下载?相信玩家们已经知道Steam上有一款免费的类似暗黑破环神的Rrpg游戏马上就要迎来公开测试了,这款新游戏就是Undecember(恶月十三)。在Undecember中黑暗诞生了光,数十国获邀加入空间站,美质疑为何没他们,专家此事中国说了算大家都知道,太空是一个充满神秘的地方,人类对这个未知的领域了解甚少。虽然一些大国已经有着多年的太空探索经验,卫星也是一颗接着一颗的发射,但在浩瀚的宇宙中,这不过就是一粒尘埃罢了。正两开国功臣争抢妻子,朱元璋摸下她肚子冷笑此乃奸细,立即处死古代封建王朝的开国皇帝,无一例外都是具备雄才大略的人,他们除了有超强的个人能力之外,还需要有凝聚力和御人的手段。就拿明朝的开国皇帝朱元璋来说,他只不过是一介平民出身,凭什么能让手下