2012-09-23 59 views
1

我有一個QLineEdit的,2 QPushButtons(添加&刪除按鈕)和而QListView。 我想在點擊添加按鈕時將QLineEdit文本添加到QListView。同樣,如果單擊刪除按鈕,我必須從QListView中刪除項目。 我正在使用QStringListModelQLineEdit文本添加到QListView。但我不知道如何刪除QListView項目。我怎樣才能做到這一點? Plz幫助..在此先感謝。如何從列表視圖中刪除項目?

#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() 
    { 

    } 
+1

當按下刪除按鈕時,您想要刪除當前選擇的一個,最後一個,另一個? – drescherjm

+1

我想刪除當前選中的項目。 –

回答

3

如果您的列表視圖只使用單一的選擇,下面的工作:

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

還有直接從項目模型去除所述項(相對於從字符串列表中刪除它,然後設置在模型上的字符串列表)的一種手段。請參閱QAbstractItemModel::removeRow的文檔。如果你走這條路,你的添加物品的方法也需要改變。

+0

非常感謝。我嘗試使用QAbstractItemModel :: removeRow(),它工作正常。再次感謝。這裏是我的編碼.. model-> removeRow(ui-> listView-> currentIndex()。row()); –

相關問題