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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM