日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

qt中QListView的用法和QModelIndex的使用

發(fā)布時(shí)間:2023/12/18 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 qt中QListView的用法和QModelIndex的使用 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

使用QTreeView,對(duì)于很多函數(shù)中針對(duì)item的唯一標(biāo)識(shí)QModelIndex的使用,記錄下兩種對(duì)于QModelIdex的使用

1,樹形結(jié)構(gòu)的item設(shè)置為選中

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);//這種方法使用的絕對(duì)路徑,但暫時(shí)沒(méi)找到其他方式設(shè)置初始化時(shí)選中。
2,通過(guò)index讀取建立item時(shí)setData的數(shù)據(jù)

直接通過(guò)index讀取的數(shù)據(jù)是錯(cuò)誤的一直顯示0,需要獲取建立QTreeView時(shí)的QStandardItemModel即treeView->setModel(itemModel)中的itemModel

QStandardItemModel * ? standardModel = static_cast < QStandardItemModel*>(itemModel);
QStandardItem * ? currentItem = standardModel->itemFromIndex(index);
QVariant data = currentItem->data();
data可轉(zhuǎn)換成任意格式。
/*****************

QListView的使用

QListView與QTreeView一樣,也是采取的mvc模式,添加數(shù)據(jù)時(shí),用相應(yīng)的模式
1、初始化時(shí)添加數(shù)據(jù)

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、根據(jù)用戶操作來(lái)添加數(shù)據(jù)

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

model->appendRow(item); ?

3、刪除數(shù)據(jù)

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

4.獲取行數(shù);

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

5.選中指定的行號(hào)

?QModelIndex qindex = m_listviewmodel_->index(index,0); ? //默認(rèn)選中 index
?ui->listViewTask->setCurrentIndex(qindex);

6.設(shè)置滾動(dòng)方式

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. ?

//設(shè)置為像素滾動(dòng);
setVerticalScrollMode(QAbstractItemView::ScrollPerPixel);

7.初始化并設(shè)置隔行彩色顯示;

?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便是廢了;因?yàn)镼ListWidget 能完成所有QListView的。沒(méi)有必要再用listview

///

添加

QString strInput = XGlobal::mGetInputString(“請(qǐng)輸入任務(wù)名稱,比如上傳省局節(jié)點(diǎn)機(jī)”);

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

/***** 刪除單個(gè)列表項(xiàng) *****/

void MainWindow::deletebtn()

{
//獲取列表項(xiàng)的指針

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

delete item; ? ? ? ?//釋放指針?biāo)赶虻牧斜眄?xiàng)

}

/***** 刪除多個(gè)列表項(xiàng) *****/

void MainWindow::delallbtn()

{
int num = ui->listWidget->count(); ?//獲取列表項(xiàng)的總數(shù)目

ui->listWidget->setFocus(); //將光標(biāo)設(shè)置到列表框上,若注釋該語(yǔ)句,則刪除時(shí),要手動(dòng)將焦點(diǎn)設(shè)置到列表框,即點(diǎn)擊列表項(xiàng)

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

{ ? //逐個(gè)獲取列表項(xiàng)的指針,并刪除

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

? ? delete item;

}

}

/***** 添加多個(gè)列表項(xiàng) *****/

void MainWindow::addallbtn()

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

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

//方法2 ?逐個(gè)添加

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

count = FileNames.count(); ? ? ? ? ? ? ?//獲取打開文件的總數(shù)目
1
// for(index = 0;index<count;index++) //這樣會(huì)報(bào)錯(cuò),無(wú)法先取出棧底元素 //注釋2

for(index=count-1;index>=0;index--) ? ? //QList<QString>的數(shù)據(jù)結(jié)構(gòu)是棧,只能從棧頂取元素
1
{
? ? QListWidgetItem *item = new QListWidgetItem;

? ? item->setText(FileNames.takeAt(index)); //逐個(gè)設(shè)置列表項(xiàng)的文本
1
2
3
// qDebug()<<FileNames.takeAt(index); //…………注釋3

? ? ui->listWidget->addItem(item); ? ? ?//加載列表項(xiàng)到列表框
1
}

}

/***** 列表項(xiàng)單擊操作 /
void MainWindow::singleclicked(QListWidgetItem item)
{
QMessageBox::information(this,“單擊消息”,“單擊”+item->text());
}
/* 列表項(xiàng)雙擊操作 ****/
void MainWindow::doubleclicked(QListWidgetItem item)
{
QMessageBox::information(this,“雙擊消息”,“雙擊”+item->text());
}

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

一:基本使用
? ? ? ? ? QListView * listView = new QListView; ? ? //創(chuàng)建對(duì)象

? ? ? ? ? listView->setEditTriggers(QAbstractItemView::NoEditTriggers); ? ? //設(shè)置 listView不可編輯

? ? ? ? ? QStringList num;

? ? ? ? ? num<<"1"<<"2"<<"3"; ? ? //放入3個(gè)字符串

? ? ?QStringListModel *model = new QStringListModel(num); ? ? //創(chuàng)建對(duì)象,并用字符串隊(duì)列初始化
? ? ?listView->setModel(model); ? ? //設(shè)置listView的moderl
二:獲取某一項(xiàng)數(shù)據(jù)
? ? ? ? ? 由剛才添加model可以知道,若想獲取某一項(xiàng)的數(shù)據(jù),那就將剛才的操作反過(guò)來(lái)做一遍就好了

? ? ? ? ? 即:

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

? ? ? ? ?注:index為QModelIndex類型;data()的返回值為QVariant類型,它可以被轉(zhuǎn)換為其他類型,我這里用了toString()函數(shù)進(jìn)行了轉(zhuǎn)換

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

? ? ? ? ? ? ? ? ? ?SLOT(setText1(const QModelIndex &)); ? ? //這里的意思是雙擊listView的某一項(xiàng)后,會(huì)在控制臺(tái)打印出一串字符

? ? ? ? ? setText1(const QModelIndex &index)

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

? ? ? ? ? }
?

總結(jié)

以上是生活随笔為你收集整理的qt中QListView的用法和QModelIndex的使用的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。