繁体   English   中英

如何使用 QLineEdit 将 QString 添加到 QListView

[英]How to add a QString to a QListView using a QLineEdit

我想使用 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);
}

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

这里已经有一个如何使用 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而不是 Widget 时,您将直接为数据而不是视图处理模型。 模型更改时将通知视图。 在这种情况下,您可能会像这样访问您的 lineEdit:

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

其它的办法; 右键单击 listView 并选择“morph into” -> “QListWidget”

这时候可以看到这个函数“lst-> addItem ("str");”

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM