ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Qt之QListView和QStandardItemModel用法

2021-08-23 20:03:56  阅读:353  来源: 互联网

标签:index QListView Qt QStandardItemModel list item model channel view


note

  • 个人理解, QListView 用于 显示数据,而数据的逻辑维护则由 QStandardItemModel 完成.

QStandardItemModel 创建

		if (nullptr							== pchannel_list_view_model_)
			pchannel_list_view_model_		= new(std::nothrow) QStandardItemModel(ui->channel_list_view);

QListView添加QStandardItemModel

  • 绑定数据源
/// 绑定数据源
ui->channel_list_view->setModel(pchannel_list_view_model_);

QListView设置为不可编辑

/// 设置为不可编辑
ui->channel_list_view->setEditTriggers(QAbstractItemView::NoEditTriggers);

添加行

standard_item_ex* item1		= new(std::nothrow)  standard_item_ex(tr("new_channel"));
pchannel_list_view_model_->appendRow(item1);

note

  • standard_item_ex 的原型如下, 我对其做了扩展
class standard_item_ex : public QStandardItem
{
public:
	explicit standard_item_ex(const QString& str_txt);
	standard_item_ex(const QIcon &icon, const QString &text);
	~standard_item_ex();
....
}

QListView 显示添加数据

ui->channel_list_view->update();

QListView滚动的最下面

ui->channel_list_view->scrollToBottom();

QListView获取选中的行

	QItemSelectionModel *selmodel			= ui->channel_list_view->selectionModel();
	if (selmodel)
	{
            /// 解析: indexlist 即可
            QModelIndexList indexlist			= selmodel->selectedIndexes();
        }

获取选择的行和列

  • 这里演示了 绑定的doublelciked的信号 和 下文的槽函数
void channel_widget::slot_list_view_item_double_clicked_(const QModelIndex & model_index)
{
	
	/// 得到行列索引
	int row_index					= model_index.row();
	int column_index				= model_index.column();
}

根据行和列获取item

  
	const int channel_row_index = 0;
	const int column_index = 0;
	QModelIndex& model_index			= pchannel_list_view_model_->index(channel_row_index, column_index);
	pchannel_list_view_model_->setData(model_index, str_new_name);

标签:index,QListView,Qt,QStandardItemModel,list,item,model,channel,view
来源: https://www.cnblogs.com/pandamohist/p/15177473.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有