Qt 如何从列表视图中删除项目?
我有一个QLineEdit、两个QPushButtons添加和删除按钮以及一个QListView。 我想在单击add按钮时将QLineEdit文本添加到QListView。同样,如果单击删除按钮,我必须从QListView中删除一个项目。 我正在使用QStringListModel将QLineEdit文本添加到QListView。但是我不知道如何删除QListView项。我该怎么做?请帮忙。。提前谢谢Qt 如何从列表视图中删除项目?,qt,qt4.7,qlistview,qlineedit,Qt,Qt4.7,Qlistview,Qlineedit,我有一个QLineEdit、两个QPushButtons添加和删除按钮以及一个QListView。 我想在单击add按钮时将QLineEdit文本添加到QListView。同样,如果单击删除按钮,我必须从QListView中删除一个项目。 我正在使用QStringListModel将QLineEdit文本添加到QListView。但是我不知道如何删除QListView项。我该怎么做?请帮忙。。提前谢谢 #ifndef EXAMPLE_H #define EXAMPLE_H #include
#ifndef EXAMPLE_H
#define EXAMPLE_H
#include <QWidget>
#include <QStringList>
#include <QStringListModel>
class EXAMPLE : public QWidget
{
Q_OBJECT
public:
explicit EXAMPLE(QWidget *parent = 0);
~EXAMPLE();
private slots:
void on_addButton_released();
void on_removeButon_released();
private:
Ui::EXAMPLE *ui;
QStringList stringList;
};
#endif // EXAMPLE_H
EXAMPLE.CPP
#include "EXAMPLE.h"
#include <QStringListModel>
EXAMPLE::EXAMPLE(QWidget *parent) :
QWidget(parent),
ui(new Ui::EXAMPLE)
{
ui->setupUi(this);
ui->listView->setModel(new QStringListModel(stringList));
}
EXAMPLE::~EXAMPLE()
{
delete ui;
}
void EXAMPLE::on_addButton_released()
{
stringList.append(ui->lineEdit->text());
((QStringListModel*) ui->listView->model())->setStringList(stringList);
ui->lineEdit->clear();
}
void EXAMPLE::on_removeButon_released()
{
}
如果列表视图仅使用单一选择,则以下操作将起作用:
void EXAMPLE::on_removeButton_released()
{
QModelIndexList selected = ui->listView->selectionModel()->selectedIndexes();
if (!selected.isEmpty())
{
stringList.removeAt(selected.first().row()-i);
((QStringListModel*) ui->listView->model())->setStringList(stringList);
}
}
如果您的列表视图允许选择多个项目,那么您将需要稍微复杂一些的内容:
void EXAMPLE::on_removeButton_released()
{
QModelIndexList selected = ui->listView->selectionModel()->selectedIndexes();
if (!selected.isEmpty())
{
qSort(selected);
for (int i=0; i<selected.count(); ++i)
{
stringList.removeAt(selected.at(i).row()-i);
}
((QStringListModel*) ui->listView->model())->setStringList(stringList);
}
}
还有一种方法可以直接从项目模型中删除项目,而不是从字符串列表中删除项目,然后在模型上设置字符串列表。有关详细信息,请参阅文档。如果沿着这条路走下去,您添加项目的方法也需要更改。如果您的列表视图仅使用单一选择,则以下操作将起作用:
void EXAMPLE::on_removeButton_released()
{
QModelIndexList selected = ui->listView->selectionModel()->selectedIndexes();
if (!selected.isEmpty())
{
stringList.removeAt(selected.first().row()-i);
((QStringListModel*) ui->listView->model())->setStringList(stringList);
}
}
如果您的列表视图允许选择多个项目,那么您将需要稍微复杂一些的内容:
void EXAMPLE::on_removeButton_released()
{
QModelIndexList selected = ui->listView->selectionModel()->selectedIndexes();
if (!selected.isEmpty())
{
qSort(selected);
for (int i=0; i<selected.count(); ++i)
{
stringList.removeAt(selected.at(i).row()-i);
}
((QStringListModel*) ui->listView->model())->setStringList(stringList);
}
}
还有一种方法可以直接从项目模型中删除项目,而不是从字符串列表中删除项目,然后在模型上设置字符串列表。有关详细信息,请参阅文档。如果您沿着这条路走下去,您添加项目的方法也需要更改。当按下删除按钮时,您要删除哪个项目当前选定的项目,即最后一个项目,其他项目?我想删除当前选中的项目。当按下“删除”按钮时,您想删除哪些项目当前选中的项目、最后一个项目、其他项目?我想删除当前选中的项目。非常感谢。我试过QabstracteModel::removeRow,效果很好。再次感谢。这是我的代码。。模型->删除UI->列表视图->当前索引.row;谢谢。我试过QabstracteModel::removeRow,效果很好。再次感谢。这是我的代码。。模型->删除UI->列表视图->当前索引.row;