QListView的使用方法

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(ui->listViewTask->model());  

model->appendRow(item);  

3、删除数据

QStandardItemModel *model = dynamic_cast(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(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())   

{
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;ilistWidget->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

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

{

    QListWidgetItem *item = new QListWidgetItem;

    item->setText(FileNames.takeAt(index)); //逐个设置列表项的文本

// qDebug()<

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

}

}

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

你可能感兴趣的:(C++,Qt)