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);

Qt之QListView和QStandardItemModel用法的更多相关文章

  1. Qt中两种定时器用法

    在Qt中使用定时器有两种方法,一种是使用QObiect类的定时器:一种是使用QTimer类.定时器的精确性依赖于操作系统和硬件,大多数平台支持20ms的精确度. 1.QObject类的定时器 QObj ...

  2. [QT]QApplication和QCoreApplication的用法

    转自:http://www.tuicool.com/articles/qmI7Bf 故事的背景是这样的,我们在写QT程序的时候或者在开始写QT程序之前总会看到这样的语句 QApplication ap ...

  3. Qt 【Qlistview + delegate 为item重写个关闭按钮】

    效果图是这样的. 实现的过程是listview + delegate 本身我想是用listwidget + delegate[网上查询到不可实现] 之前也试过在item中添加布局跟控件,但是在点击的时 ...

  4. C++-Qt【4】-CheckBox on QListView

    引用:http://www.qtcentre.org/threads/47119-checkbox-on-QListView QListWidgetItem *item = new QListWidg ...

  5. [Qt基础内容-08] Qt中MVC的M(Model)

    Qt中MVC的M(Model)简单介绍 Qt有自己的MVC框架,分别是model(模型).view(视图).delegate(委托),这篇文章,简单的介绍以下Qt中有关model(模型)的类以及一些基 ...

  6. Qt中的View Model模型

    原始日期: 2016-08-17 21:19 Qt中的View主要有三种QListView,QTreeView, QTabelView 而对应的Model是:QStringListModel, QAb ...

  7. QT MVC 模型/视图

    1. 模型视图实例一, QFileSystemModel  QTreeView ,model/view示例. #include <QApplication> #include <QF ...

  8. Qt——消息对话框的设计

    1.消息对话框是什么 消息对话框(MessageBox)提供了一个模态对话框,用来通知用户某些信息,或者用来询问用户一个问题并获得一个答复. 先看下面2张图—— 第一张图是网易云音乐的界面截图,在删除 ...

  9. 【golang-GUI开发】qt之signal和slot(一)

    想了很久,我决定还是先从signal和slot(信号槽)开始讲起. signal和slot大家一定不陌生,先看一段示例(选自文档): class Counter : public QObject { ...

随机推荐

  1. 自然溢出哈希 hack 方法

    今天不知道在什么地方看到这个东西,感觉挺有意思的,故作文以记之( 当 \(base\) 为偶数时,随便造一个长度 \(>64\) 的字符串,只要它们后 \(64\) 位相同那么俩字符串的哈希值就 ...

  2. 洛谷 P5331 - [SNOI2019]通信(CDQ 分治优化建图+费用流)

    题面传送门 首先熟悉网络流的同学应该能一眼看出此题的建模方法: 将每个点拆成两个点 \(in_i,out_i\),连一条 \(S\to in_i\),容量为 \(1\) 费用为 \(0\) 的边 连一 ...

  3. VS调用别人的COM组件的问题

    调用第三方的COM组件,记得要先在管理员cmd执行:regsvr32 xxxx.dll 没执行之前运行 HRESULT hr = pComm.CreateInstance("xxxx.Com ...

  4. map与unordered_map区别及使用

    需要引入的头文件不同map: #include <map>unordered_map: #include <unordered_map> 内部实现机理不同map: map内部实 ...

  5. hbase调优

    @ 目录 一.phoenix调优 1.建立索引超时,查询超时 2.预分区 hbase shell预分区 phoenix预分区 3.在创建表的时候指定salting. 4.二级索引 建立行键与列值的映射 ...

  6. Java日期格式转换不用发愁

    前言 Java 中日期.时间相关的类相当的多,并且分不同的版本提供了不同的实现,包括 Date . Calendar . LocalDateTime . ZoneDateTime . OffsetDa ...

  7. 日常Java 2021/9/23

    练习使用Math.random函数,以及JOptionPane.showMessageDialog(null,"字符串","Results",JOptionPa ...

  8. YARP+AgileConfig 5分钟实现一个支持配置热更新的代理网关

    YARP 是微软开源的一个反向代理项目,英文名叫 Yet Another Reverse Proxy .所谓反向代理最有名的那就是 nginx 了,没错 YARP 也可以用来完成 nginx 的大部分 ...

  9. day07 Nginx入门

    day07 Nginx入门 Nginx简介 Nginx是一个开源且高性能.可靠的http web服务.代理服务 开源:直接获取源代码 高性能:支持海量开发 可靠:服务稳定 特点: 1.高性能.高并发: ...

  10. Qt5的安装和编译

    Ubuntu18.04安装Qt5 1.配置unbuntu 和宿主机共享文件夹安装vmware-tools 2.下载 Qt  http://download.qt.io/archive/qt/ 3.修改 ...