使用QTreeView,对于很多函数中针对item的唯一标识QModelIndex的使用,记录下两种对于QModelIdex的使用

1,树形结构的item设置为选中

QModelIndex rootIndex;
QModelIndex robotsIndex;
QModelIndex nonMobileIndex;
rootIndex = treeView->model()->index(0, 0);//最顶层item的index
robotsIndex = treeView->model()->index(10, 0, rootIndex);//选中item父亲的index
nonMobileIndex = treeView->model()->index(1, 0, robotsIndex);//选中item的index
treeView->setCurrentIndex(nonMobileIndex);//这种方法使用的绝对路径,但暂时没找到其他方式设置初始化时选中。
2,通过index读取建立item时setData的数据

直接通过index读取的数据是错误的一直显示0,需要获取建立QTreeView时的QStandardItemModel即treeView->setModel(itemModel)中的itemModel

QStandardItemModel *   standardModel = static_cast < QStandardItemModel*>(itemModel);
QStandardItem *   currentItem = standardModel->itemFromIndex(index);
QVariant data = currentItem->data();
data可转换成任意格式。
/*****************

QListView的使用

QListView与QTreeView一样,也是采取的mvc模式,添加数据时,用相应的模式
1、初始化时添加数据

QStandardItemModel *model = new QStandardItemModel(this); //可以把这行放到头文件里面
1
QStandardItem *item = new QStandardItem("item1");  
model->appendRow(item);  
item = new QStandardItem("item2");  
model->appendRow(item);  
ui->listViewTask->setModel(model);

2、根据用户操作来添加数据

QStandardItem *item = new QStandardItem("item3");  
QStandardItemModel *model = dynamic_cast<QStandardItemModel*>(ui->listViewTask->model());

model->appendRow(item);

3、删除数据

QStandardItemModel *model = dynamic_cast<QStandardItemModel*>(ui->listViewTask->model());  
model->removeRow(ui->listViewTask->currentIndex().row());

4.获取行数;

int row_num = ui->listViewTask->model()->rowCount();

5.选中指定的行号

QModelIndex qindex = m_listviewmodel_->index(index,0);   //默认选中 index
 ui->listViewTask->setCurrentIndex(qindex);

6.设置滚动方式

enum QAbstractItemView::ScrollMode  
Constant    Value   Description  
QAbstractItemView::ScrollPerItem    0   The view will scroll the contents one item at a time.  
QAbstractItemView::ScrollPerPixel   1   The view will scroll the contents one pixel at a time.

//设置为像素滚动;
setVerticalScrollMode(QAbstractItemView::ScrollPerPixel);

7.初始化并设置隔行彩色显示;

standardItemModel = new QStandardItemModel(this);  
  
    QStringList strList;  
    strList.append("string1");  
    strList.append("string2");  
    strList.append("string3");  
    strList.append("string4");  
    strList.append("string5");  
    strList.append("string6");  
    strList.append("string7");  
    strList << "string8";  
    strList += "string9";  
    int nCount = strList.size();  
    for(int i = 0; i < nCount; i++)  
    {  
        QString string = static_cast<QString>(strList.at(i));  
        QStandardItem *item = new QStandardItem(string);  
        if(i % 2 == 1)  
        {  
            QLinearGradient linearGrad(QPointF(0, 0), QPointF(200, 200));  
            linearGrad.setColorAt(0, Qt::darkGreen);  
            linearGrad.setColorAt(1, Qt::yellow);  
            QBrush brush(linearGrad);  
            item->setBackground(brush);  
        }  
        standardItemModel->appendRow(item);  
    }  
    listView->setModel(standardItemModel);  
    listView->setFixedSize(200,300);  
    connect(listView,SIGNAL(clicked(QModelIndex)),this,SLOT(itemClicked(QModelIndex)));  
}

8。更新某一行;

int row=listview->currentIndex().row();
 if(row!=-1)
 {
  QModelIndex index=listmodel->index(row);
  QString str=listmodel->data(index,Qt::DisplayRole).toString();//get data
  bool ok;
  QString text = QInputDialog::getText(this, tr("edit item"),
          tr("please edit item"), QLineEdit::Normal,
          str, &ok);
  if (ok && !text.isEmpty())
  {
   listmodel->setData(index,text,Qt::EditRole);
   listview->setCurrentIndex(index);
  }
  
 }
 else
 {
  QMessageBox::information(NULL,tr("information"),tr("please select a item"));
 }

///

QListWidget 是派生于QListView的。有了QListWidget ,QListView便是废了;因为QListWidget 能完成所有QListView的。没有必要再用listview

///

添加

QString strInput = XGlobal::mGetInputString(“请输入任务名称,比如上传省局节点机”);

if(strInput.isEmpty())   
1
{
return;

}

QListWidgetItem *pItem = new QListWidgetItem();

pItem->setText(strInput);

ui->listViewTask->addItem(pItem);

或者这样也行

QStringList strList;
strList<< “Item1”<<“Item2”<< “Item3”<<“Item4”;

this->addItems(strList);

/***** 删除单个列表项 *****/

void MainWindow::deletebtn()

{
//获取列表项的指针

QListWidgetItem *item = ui->listWidget->takeItem(ui->listWidget->currentRow());

delete item;        //释放指针所指向的列表项

}

/***** 删除多个列表项 *****/

void MainWindow::delallbtn()

{
int num = ui->listWidget->count();  //获取列表项的总数目

ui->listWidget->setFocus(); //将光标设置到列表框上,若注释该语句,则删除时,要手动将焦点设置到列表框,即点击列表项

for(int i=0;i<num;i++)

{   //逐个获取列表项的指针,并删除

QListWidgetItem *item = ui->listWidget->takeItem(ui->listWidget->currentRow());

delete item;

}

}

/***** 添加多个列表项 *****/

void MainWindow::addallbtn()

{
QStringList FileNames = QFileDialog::getOpenFileNames(this,"打开",QDir::currentPath(),"所有文件(*.*);;文本文档(*.txt)");

//方法1  整体添加
1
2
3
// ui->listWidget->addItems(FileNames);

//方法2  逐个添加

int index=0,count=0;
1
2
3
// QListWidgetItem *item = new QListWidgetItem; //…………注释1

count = FileNames.count();              //获取打开文件的总数目
1
// for(index = 0;index<count;index++) //这样会报错,无法先取出栈底元素 //注释2

for(index=count-1;index>=0;index--)     //QList<QString>的数据结构是栈,只能从栈顶取元素
1
{
    QListWidgetItem *item = new QListWidgetItem;

item->setText(FileNames.takeAt(index)); //逐个设置列表项的文本
1
2
3
// qDebug()<<FileNames.takeAt(index); //…………注释3

ui->listWidget->addItem(item);      //加载列表项到列表框
1
}

}

/***** 列表项单击操作 /
void MainWindow::singleclicked(QListWidgetItem item)
{
QMessageBox::information(this,“单击消息”,“单击”+item->text());
}
/* 列表项双击操作 ****/
void MainWindow::doubleclicked(QListWidgetItem item)
{
QMessageBox::information(this,“双击消息”,“双击”+item->text());
}

/************************

一:基本使用
          QListView * listView = new QListView;     //创建对象

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

QStringList num;

num<<"1"<<"2"<<"3";     //放入3个字符串

QStringListModel *model = new QStringListModel(num);     //创建对象,并用字符串队列初始化
     listView->setModel(model);     //设置listView的moderl
二:获取某一项数据
          由刚才添加model可以知道,若想获取某一项的数据,那就将刚才的操作反过来做一遍就好了

即:

QString str = listView->model()->data(index).toString();

注:index为QModelIndex类型;data()的返回值为QVariant类型,它可以被转换为其他类型,我这里用了toString()函数进行了转换

三:槽的连接
          connect(listView,SIGNAL(doubleClicked(const QModelIndex &)),this,

SLOT(setText1(const QModelIndex &));     //这里的意思是双击listView的某一项后,会在控制台打印出一串字符

setText1(const QModelIndex &index)

{
                  qDebug()<<"槽连接成功!!!";

}

qt中QListView的用法和QModelIndex的使用相关推荐

  1. Qt中的模型视图设计模式

    文章目录 1 初探Qt中的模型视图设计模式 2 模型视图中的索引 3 模型中的数据组织方式初探 1 初探Qt中的模型视图设计模式 模型视图设计模式的核心思想: 模型(数据)与视图(显示)相分离. 模型 ...

  2. qt中数据库操作总结

    #include <QtSql> QT += sql QSqlDatabase类实现了数据库连接的操作 QSqlQuery类用来执行SQL语句 QSqlRecord类 封装数据库所有记录 ...

  3. Qt之QListView使用

    记录下使用QListView遇到的各种问题 QListView可以用来以列表的形式展示数据,在Qt中使用model/View结构来管理数据与视图的关系,model负责数据的存取,数据的交互通过dele ...

  4. Qt中model/view设计模式

    Qt Model/View 学习笔记 (一) Qt 4推出了一组新的item view类,它们使用model/view结构来管理数据与表示层的关系.这种结构带来的 功能上的分离给了开发人员更大的弹性来 ...

  5. QT中Model-View-Delegate委托代理机制用法介绍

    文章目录 本地数据加载(Data) 添加数据模型(Model) 添加代理模型(Proxy) 添加元素的代理(Delegate) 添加视图层(View) 使用效果 之前的一篇文章中介绍过QT的委托代理机 ...

  6. QT中树控件QTreeView开发实例

    转自:http://mobile.51cto.com/symbian-268700.htm 本文讲解了QT中树控件QTreeView开发实例,对于QTreeView没有过多的讲解,那么不说废话了,看代 ...

  7. Qt中的自定义模型类

    文章目录 1 Qt中的通用模型类 1.1 Qt中的通用模型类 1.2 Qt中的变体类型QVariant 2 自定义模型类 2.1 自定义模型类设计分析 2.2 自定义模型类数据层.数据表示层.数据组织 ...

  8. 【精华】详解Qt中的内存管理机制

    前言 内存管理,是对软件中内存资源的分配与释放进行有效管理的方法和理论. 众所周知,内存管理是软件开发的一个重要的内容.软件规模越大,内存管理可能出现的问题越多.如果像C语言一样手动地管理内存,一会给 ...

  9. Qt|C++工作笔记-对虚函数的进一步认识(关键是Qt中如何正确使用,达到想要的效果)

    关于虚函数的简单例子 首先是一个很简单例子,刚学C++的朋友都能理解 源码如下: #include <cstdio> #include <windows.h>static in ...

最新文章

  1. 如何优化 Linux系统
  2. 角色管理与今日内容介绍
  3. 让 WPF 的 RadioButton 支持再次点击取消选中的功能
  4. python信号量怎么用_Python3.X 线程中信号量的使用方法示例
  5. 10W阅读,万人点赞,这套大数据平台建设方法论,到底有什么干货
  6. POI 怎么设置Excel整列的CellStyle啊
  7. stmcubemx 脉冲计数_STM32CubeMX:ETR外部脉冲计数器
  8. 【报告分享】二次元衍生创作行业报告.pdf(附下载链接)
  9. php更新不了数据库,为什么我不能使用PHP编辑/更新数据库?
  10. httpd-2.4.9.tar.bz2的编译安装配置以及CGI、虚拟主机、https、mod_deflate、mod_status的实现。...
  11. linux mk文件6,linux_2.6.30.4_Makefile_3--Makefile学习笔记
  12. Win10—VMware15虚拟机安装教程
  13. 随机过程之更新理论的应用
  14. 文献翻译——基于关联规则挖掘识别的鸡源大肠杆菌共有多重耐药模式(上)
  15. NYOJ-57-6174问题-2013年6月29日11:58:06
  16. 群体智能与进化计算_群智能计算简介
  17. 公鸡每只值5文钱,母鸡每只值3文钱,而三只小鸡值一文钱。用100文钱买100只鸡,问:公鸡,母鸡,小鸡各有多少只?
  18. java.lang.ArrayStoreException
  19. kali 去windows共享数据--smbclient使用方法_原水_新浪博客
  20. 1.金融市场,资产管理与投资基金

热门文章

  1. docker 添加端口映射_Docker快速搭建PHP开发环境详细教程
  2. mysql保存特殊表情_让 MySQL 支持 emoji 表情等特殊字符存储
  3. 计算机网络实验中S1是啥意思,某计算机A需要访问域名www.yy.com,它首先向本域DNS服务器S1查询,.._简答题试题答案...
  4. 基于matlab的状态反馈与极点配置
  5. 网信号好怎么不显示无服务器,苹果iPhone12经常出现无服务状态 信号不好怎么解决...
  6. html获取文本框中的文字,JavaScript实现input输入框点击获取文字内容
  7. matlab软件moran值,用matlab求moran并作图的具体步骤
  8. mysql 查询慢 分析_MySQL优化:定位慢查询的两种方法以及使用explain分析SQL
  9. 小米拒绝权限_小米手机MIUI12真有那么好吗?
  10. 同样是做技术,为什么 Java 能比 C++ 多赚10万?