1

QLineEdit 、2つのQPushButton ボタンの追加と削除)、およびQListViewがあります。追加ボタンがクリックされたときにQLineEditテキストをQListViewに追加したい。同様に、削除ボタンがクリックされた場合、QListViewからアイテムを削除する必要があります。QStringListModelを使用してQLineEditテキストを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()
    {

    }
4

1 に答える 1

4

リストビューが単一の選択のみを使用している場合、以下が機能します。

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のドキュメントを参照してください。この道を進むと、アイテムの追加方法も変更する必要があります。

于 2012-09-23T23:45:47.247 に答える