3

QLineEdit を使用して QString を書き込み、次に QPushButton を使用して項目 (文字列) を listView に追加したい

これが私が得たものです:

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
    {
    ui->setupUi(this);

    model = new QStringListModel(this);

    QStringList list;

    list << "Some Item";

    model->setStringList(list);

    ui->listView->setModel(model);
    ui->listView->setEditTriggers(QAbstractItemView::NoEditTriggers);
}

void MainWindow::on_pushButton_3_clicked()
{
    //add
    int row = model->rowCount();   // model = new QStringListModel
    model->insertRow(row);

    QModelIndex index = model->index(row);
    ui->listView->setCurrentIndex(index);
    ui->listView->edit(index);  // instead of edit, I'd like to ... add a QString
}

問題は、私が編集できるようになりたくないということです (これが私が自分でなんとかできたすべてです)。代わりに、CurrentIndex に項目を追加し、その項目を のテキスト フィールドにしlineEditます。そのフィールドにアクセスするにはどうすればよいですか? ですかlineEdit->text()?それをリストビューに追加するにはどうすればよいですか?

リストに何かを追加する方法がわかりません。間違って edit を見つけましたが、Google はこれまで役に立ちませんでした。私は Stack Overflow ができることを願っています。

編集:これを試すことにしましたが、最善の解決策ではないようです

void MainWindow::on_pushButton_3_clicked()
{
    //add

    QStringList list;
    list = model->stringList();
    list.append(ui->lineEdit->text());
    model->setStringList(list);
}

しかし、これは奇妙なやり方のようです。また、何らかの理由で改行が含まれているようです。

4

2 に答える 2

10

ここで QStringListModel を使用する方法の例が既にあります: https://stackoverflow.com/a/5825113/496445

model->insertRow(model->rowCount());
QModelIndex index = model->index(model->rowCount()-1)
model->setData(index, str);

この提案されたアプローチでは、別の理由ですでに QStringList を持っていて、それで初期化したい場合を除き、QStringList は必要ないことに注意してください。

ウィジェットの代わりにを使用するQ*Viewと、ビューの代わりにモデルのデータを直接処理することになります。モデルが変更されると、ビューが通知されます。この場合、おそらく次のように lineEdit にアクセスします。

QString str = ui->lineEdit->text();
于 2012-06-23T17:34:17.467 に答える
4

別の方法; 右クリックして listView を選択し、[morph into] -> [QListWidget] を選択します。

この時点で、この関数「lst-> addItem ("str");」が表示されます。

于 2014-12-24T09:16:05.483 に答える