QT中如何获取QListView选中项的文本?
How to get the text of selected item from QListView in QT?
我需要在 QListView
中获取所选项目名称作为 QString
。我已经尝试 google,但我没有发现任何有用的东西。
我的QListView
,Model
填充方法如下:
QString setting_path = QDesktopServices::storageLocation(QDesktopServices::DataLocation);
QStandardItemModel *model2=new QStandardItemModel();
QFile file(setting_path+"history.txt");
if (!file.open(QIODevice::ReadOnly | QIODevice::Text))
return;
QTextStream in(&file);
while(!in.atEnd()) {
QString line = in.readLine();
QList<QStandardItem *> items;
QStringList fields = line.split(">");
QStringList fields3 = fields.filter("");
foreach (QString text, fields3)
{
items.append(new QStandardItem((QString)text));
}
if(items.length() > 0)
{
model2->appendRow(items);
}
}
ui->listView->setModel(model2);
}
我想,你可以用 selectedIndexes()
这个
QModelIndexList QListView::selectedIndexes() const;
因此,当您需要获取项目时 - 只需调用此方法并从您的模型中获取项目(通过您的访问器,或通过使用具有 your/system 角色的数据(索引),或通过您的任何方式必须按行和列的索引获取项目。
例如,这是获取第一项的方法:
void MyListView::somethingIsSelected() {
const auto selectedIdxs = selectedIndexes();
if (!selectedIdxs.isEmpty()) {
const QVariant var = model()->data(selectedIdxs.first());
// next you need to convert your `var` from `QVariant` to something that you show from your data with default (`Qt::DisplayRole`) role, usually it is a `QString`:
const QString selectedItemString = var.toString();
// or you also may do this by using `QStandardItemModel::itemFromIndex()` method:
const QStandardItem* selectedItem = dynamic_cast<QStandardItemModel*>(model())->itemFromIndex(selectedIdxs.first());
// use your `QStandardItem`
}
}
使用以下代码解决:
void hist::on_listView_clicked(const QModelIndex &index)
{
QModelIndexList templatelist = ui->listView
->selectionModel()
->selectedIndexes();
QStringList stringlist;
foreach (const QModelIndex &index, templatelist){
stringlist.append(index.data(Qt::DisplayRole).toString());
}
qDebug() << stringlist.join(",");
}
谢谢大家!
我需要在 QListView
中获取所选项目名称作为 QString
。我已经尝试 google,但我没有发现任何有用的东西。
我的QListView
,Model
填充方法如下:
QString setting_path = QDesktopServices::storageLocation(QDesktopServices::DataLocation);
QStandardItemModel *model2=new QStandardItemModel();
QFile file(setting_path+"history.txt");
if (!file.open(QIODevice::ReadOnly | QIODevice::Text))
return;
QTextStream in(&file);
while(!in.atEnd()) {
QString line = in.readLine();
QList<QStandardItem *> items;
QStringList fields = line.split(">");
QStringList fields3 = fields.filter("");
foreach (QString text, fields3)
{
items.append(new QStandardItem((QString)text));
}
if(items.length() > 0)
{
model2->appendRow(items);
}
}
ui->listView->setModel(model2);
}
我想,你可以用 selectedIndexes()
这个
QModelIndexList QListView::selectedIndexes() const;
因此,当您需要获取项目时 - 只需调用此方法并从您的模型中获取项目(通过您的访问器,或通过使用具有 your/system 角色的数据(索引),或通过您的任何方式必须按行和列的索引获取项目。
例如,这是获取第一项的方法:
void MyListView::somethingIsSelected() {
const auto selectedIdxs = selectedIndexes();
if (!selectedIdxs.isEmpty()) {
const QVariant var = model()->data(selectedIdxs.first());
// next you need to convert your `var` from `QVariant` to something that you show from your data with default (`Qt::DisplayRole`) role, usually it is a `QString`:
const QString selectedItemString = var.toString();
// or you also may do this by using `QStandardItemModel::itemFromIndex()` method:
const QStandardItem* selectedItem = dynamic_cast<QStandardItemModel*>(model())->itemFromIndex(selectedIdxs.first());
// use your `QStandardItem`
}
}
使用以下代码解决:
void hist::on_listView_clicked(const QModelIndex &index)
{
QModelIndexList templatelist = ui->listView
->selectionModel()
->selectedIndexes();
QStringList stringlist;
foreach (const QModelIndex &index, templatelist){
stringlist.append(index.data(Qt::DisplayRole).toString());
}
qDebug() << stringlist.join(",");
}
谢谢大家!