如何使用QLineEdit将QString添加到QListView

时间:2012-06-23 16:26:12

标签: c++ qt listview qt4

我想使用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()吗?以及如何将其添加到列表视图?

我根本不知道如何在列表中添加任何内容。我发现错误编辑,谷歌到目前为止没有帮助。我希望Stack Overflow可以,而且会。

编辑:我决定试试这个,但它似乎不是最好的解决方案

void MainWindow::on_pushButton_3_clicked()
{
    //add

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

但这似乎是一种奇怪的做事方式。由于某种原因,它似乎也包括换行符。

2 个答案:

答案 0 :(得分:5)

这里有一个如何使用QStringListModel的示例:https://stackoverflow.com/a/5825113/496445

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

请注意,在这个建议的方法中,您不需要QStringList,除非您已经有一个原因而想要用它进行初始化。

当您使用Q*View而不是Widget时,您将直接处理数据而不是视图。模型更改时将通知视图。在这种情况下,您可能会像这样访问您的lineEdit:

QString str = ui->lineEdit->text();

答案 1 :(得分:2)

另一种方式;右键单击列表视图并选择&#34;变换为&#34; - &GT; &#34;而QListView&#34;

此时您可以看到此功能&#34; lst-&gt; addItem (&#34; str&#34;);&#34;