zoukankan      html  css  js  c++  java
  • QListView的使用

    QListView与QTreeView一样,也是采取的mvc模式,添加数据时,用相应的模式
    1、初始化时添加数据
     
    QStandardItemModel *model = new QStandardItemModel(this); //可以把这行放到头文件里面


    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.初始化并设置隔行彩色显示;

    1.  standardItemModel = new QStandardItemModel(this);  
    2.   
    3.     QStringList strList;  
    4.     strList.append("string1");  
    5.     strList.append("string2");  
    6.     strList.append("string3");  
    7.     strList.append("string4");  
    8.     strList.append("string5");  
    9.     strList.append("string6");  
    10.     strList.append("string7");  
    11.     strList << "string8";  
    12.     strList += "string9";  
    13.     int nCount = strList.size();  
    14.     for(int i = 0; i < nCount; i++)  
    15.     {  
    16.         QString string = static_cast<QString>(strList.at(i));  
    17.         QStandardItem *item = new QStandardItem(string);  
    18.         if(i % 2 == 1)  
    19.         {  
    20.             QLinearGradient linearGrad(QPointF(0, 0), QPointF(200, 200));  
    21.             linearGrad.setColorAt(0, Qt::darkGreen);  
    22.             linearGrad.setColorAt(1, Qt::yellow);  
    23.             QBrush brush(linearGrad);  
    24.             item->setBackground(brush);  
    25.         }  
    26.         standardItemModel->appendRow(item);  
    27.     }  
    28.     listView->setModel(standardItemModel);  
    29.     listView->setFixedSize(200,300);  
    30.     connect(listView,SIGNAL(clicked(QModelIndex)),this,SLOT(itemClicked(QModelIndex)));  
    31. }  

     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())   
    {
    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  整体添加
    //    ui->listWidget->addItems(FileNames);
    
    
        //方法2  逐个添加
        int index=0,count=0;
    //    QListWidgetItem *item = new QListWidgetItem;  //…………注释1
        count = FileNames.count();              //获取打开文件的总数目
    
    
    //    for(index = 0;index<count;index++)    //这样会报错,无法先取出栈底元素  //注释2
        for(index=count-1;index>=0;index--)     //QList<QString>的数据结构是栈,只能从栈顶取元素
       {
            QListWidgetItem *item = new QListWidgetItem;
            item->setText(FileNames.takeAt(index)); //逐个设置列表项的文本
    //        qDebug()<<FileNames.takeAt(index);        //…………注释3
            ui->listWidget->addItem(item);      //加载列表项到列表框
       }
    }

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

  • 相关阅读:
    排序系列 之 希尔排序算法 —— Java实现
    排序系列 之 快速排序算法 —— Java实现
    排序系列 之 冒泡排序及其改进算法 —— Java实现
    排序系列 之 折半插入排序算法 —— Java实现
    排序系列 之 直接插入排序算法 —— Java实现
    Three.js入门篇(一)创建一个场景
    THREE.JS(如何想场景中添加物体对象)
    Tween.js 动画效果
    js柯里化
    node path模块
  • 原文地址:https://www.cnblogs.com/zhoujgssp/p/7782278.html
Copyright © 2011-2022 走看看