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.初始化並設置隔行彩色顯示;
- 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())
{
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());
}