手机网站类型网站开发预算报价表
手机网站类型,网站开发预算报价表,邢台优化公司,百度数据研究中心往期回顾 【QT入门】 Qt代码创建布局之setLayout使用-CSDN博客 【QT入门】 Qt代码创建布局之多重布局变换与布局删除技巧-CSDN博客 【QT入门】 QTabWidget各种常见用法详解-CSDN博客 【QT入门】 QListWidget各种常见用法详解之列表模式
QListWidget有列表和图标两种显示模式默认是列表模式我们就先看列表模式。 enum ViewMode { ListMode, //列表模式 IconMode //图标模式 }; 一样的学一个新的控件首先要看他是怎么构造的其次看怎么用常用的方法然后要去看他的信号函数特别是熟悉常用方法和信号。而且ui界面创建和手动代码创建都要学会。
一、UI界面创建
ui界面创建List Widget是很简单的找到List Widget拖动到窗口上即可。
在里面可以实现添加删除选项的基本功能还能对添加的每个Item进行样式设计添加图片等ui操作简单明了还很容易实现。 二、手动代码创建
1、最终效果 2、QListWidgetItem
主要用到的就是 QListWidgetItem 这个类去创建QListWidget里面的选项也就是Item
我先用ui搭建了整体框架 然后再用代码添加Item用addItem()方法。
代码很简单就没什么好说的方法参数什么的忘记了就点进去看。
值得一提的是这里依旧是可以自定义Item对象因为Item里面实际放的是Widget所以我们可以创建Widget对象用ui界面设计了放进Item对象里去。最终效果里的头像、昵称、内容就是用的自定义Item对象搭了一个大概框架如果做精细化其实就类似于微信里一个个好友聊天框。
Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui-setupUi(this);QListWidgetItem *pListItem1 new QListWidgetItem(QIcon(:/new/prefix2/res/editor.png),editor);QListWidgetItem *pListItem2 new QListWidgetItem(QIcon(:/new/prefix2/res/env.png),env);QListWidgetItem *pListItem3 new QListWidgetItem(QIcon(:/new/prefix2/res/help.png),help);QListWidgetItem *pListItem4 new QListWidgetItem(QIcon(:/new/prefix2/res/kits.png),kits);QListWidgetItem *pListItem5 new QListWidgetItem(QIcon(:/new/prefix2/res/vim.png),vim);QListWidgetItem *pListItem6 new QListWidgetItem;ui-listWidget-addItem(pListItem1);ui-listWidget-addItem(pListItem2);ui-listWidget-addItem(pListItem3);ui-listWidget-addItem(pListItem4);ui-listWidget-addItem(pListItem5);ui-listWidget-addItem(pListItem6);CuserItem *cuseritem new CuserItem(this);ui-listWidget-setItemWidget(pListItem6,cuseritem);}
三、附加功能右键单击菜单item删除
这里主要是对列表模式的一个扩展就是说当我们用列表模式能够在listWidget里显示item的时候我们想要实现单击选项出现菜单实现删除item等功能。
1、思路
1、先是创建item加入到listWidget里面去2、然后是执行初始化菜单函数在初始化函数的实现里创建action对象并对每个对象连接相应的槽函数3、设置菜单策略不设置无法显示菜单4、最后是连接item对象和菜单也就是右键单击item才出现相应的菜单
2、知识点分析 2.1、设置菜单策略
1、ui.listWidget-setContextMenuPolicy(Qt::CustomContextMenu);
将listWidget对象的上下文菜单策略设置为Qt::CustomContextMenu。这意味着可以为列表部件设置自定义上下文菜单。必须设置不然无法显示菜单。
2.2、创建指针
2、QListWidgetItem* pItem ui.listWidget-itemAt(pos);
这行代码创建了一个指向QListWidgetItem对象的指针pItem该对象对应于listWidget中位置pos处的项目。
要知道这个itemAt方法是Qt中用于检索给定坐标位置处的列表部件中的项目的方法
QListWidgetItem* QListWidget::itemAt(const QPoint position) const;
如果给定的位置处有项目则返回一个指向该项目的QListWidgetItem指针如果该位置没有项目则返回nullptr。这个方法通常用于处理鼠标事件以确定用户单击或右键单击的是哪个项目。 由于我们要是实现单击选择删除item所以需要用到这个方法。
2.3、删除item
2.3.1动态删除
知道item的名字, 根据名字删除,这种可用于用户掉线信息丢失等。
在listWidget中查找包含字符串kits的项目然后将找到的第一个匹配项目移除并删除。
2.3.1.1代码示例 QListQListWidgetItem* list;list ui.listWidget-findItems(kits, Qt::MatchCaseSensitive);QListWidgetItem* sel list[0];int r ui.listWidget-row(sel);QListWidgetItem* item ui.listWidget-takeItem(r); ui.listWidget-removeItemWidget(item);delete item;
我们一一分析这段代码
QListQListWidgetItem* list;声明了一个QList类型的列表list用于存储QListWidgetItem*指针。list ui.listWidget-findItems(kits, Qt::MatchCaseSensitive);调用findItems函数在listWidget中查找内容为kits的项目并以区分大小写的方式进行匹配。搜索结果存储在列表list中。QListWidgetItem* sel list[0];从存储搜索结果的列表中获取第一个匹配项并将其赋值给指针sel。 int r ui.listWidget-row(sel);获取项目sel在listWidget中的行索引并将其存储在变量r中。QListWidgetItem* item ui.listWidget-takeItem(r);从listWidget中移除第r行的项目并将其返回给指针item。此时该项目已经不再属于listWidget。ui.listWidget-removeItemWidget(item); 移除与项目item关联的部件。这一步是为了确保在删除项目之前先移除其部件以避免内存泄漏。delete item;删除项目item对象释放其在内存中的空间。
2.3.2右键点击删除
QListWidgetItem* item ui.listWidget- currentItem();
ui.listWidget-removeItemWidget(item);
delete item;
这个就没什么好说的很简单推荐用这个就是找到当前点击的item并移除。
3、完整实例代码
#include QListWidget_02.h
#include QListWidgetItem
#include QAction
#include QMessageBoxQListWidget_02::QListWidget_02(QWidget *parent): QWidget(parent)
{ui.setupUi(this);QListWidgetItem* pListItem1 new QListWidgetItem(QIcon(:/QListWidget_02/res/editor.png), editor);QListWidgetItem* pListItem2 new QListWidgetItem(QIcon(:/QListWidget_02/res/env.png), env);QListWidgetItem* pListItem3 new QListWidgetItem(QIcon(:/QListWidget_02/res/help.png), help);QListWidgetItem* pListItem4 new QListWidgetItem(QIcon(:/QListWidget_02/res/kits.png), kits);QListWidgetItem* pListItem5 new QListWidgetItem(QIcon(:/QListWidget_02/res/vim.png), vim);ui.listWidget-addItem(pListItem1);ui.listWidget-addItem(pListItem2);ui.listWidget-addItem(pListItem3);ui.listWidget-addItem(pListItem4);ui.listWidget-addItem(pListItem5);initRight();//设置菜单策略必须设置不然无法显示菜单ui.listWidget-setContextMenuPolicy(Qt::CustomContextMenu);//连接信号槽connect(ui.listWidget, QListWidget::customContextMenuRequested, this, QListWidget_02::onPopupRightMenu);}QListWidget_02::~QListWidget_02()
{}void QListWidget_02::onPopupRightMenu(const QPoint pos)
{QListWidgetItem* pItem ui.listWidget-itemAt(pos);if (!pItem){return;}m_pRightMenu-exec(QCursor::pos());
}void QListWidget_02::initRight()
{m_pRightMenu new QMenu(this);QAction* qAce1 new QAction(u8动作一, this);QAction* qAce2 new QAction(u8动作二, this);QAction* qAce3 new QAction(u8动作三, this);QAction* qAce4 new QAction(u8删除, this);m_pRightMenu-addAction(qAce1);m_pRightMenu-addAction(qAce2);m_pRightMenu-addAction(qAce3);m_pRightMenu-addAction(qAce4);connect(qAce1, QAction::triggered, [] {QMessageBox::information(this, title, qAce1);});connect(qAce4, QAction::triggered, [] {//方式1:知道item的名字, 根据名字删除,这种可用于用户掉线信息丢失等动态删除// QListQListWidgetItem* list;//list ui.listWidget-findItems(kits, Qt::MatchCaseSensitive);//QListWidgetItem* sel list[0];//int r ui.listWidget-row(sel);//QListWidgetItem* item ui.listWidget-takeItem(r); ui.listWidget-removeItemWidget(item);//delete item; //方式2:// 右键点击删除或者选中删除QListWidgetItem* item ui.listWidget- currentItem();ui.listWidget-removeItemWidget(item);delete item;});
} 都看到这里了点个赞再走呗朋友~
加油吧预祝大家变得更强
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/92540.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!