微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在 QTableView 中编辑选定的数据/行?

如何解决如何在 QTableView 中编辑选定的数据/行?

我有一个 QTableView,如果用户选择了一行,我想通过单击按钮来更改表中的数据。所以我的问题是,我不知道如何获取所选行的行索引,以将其提供给按钮。

我有这个对话框:

ListDialog::ListDialog(QWidget *parent,int listId) :
    QDialog(parent),ui(new Ui::ListDialog)
{
    ui->setupUi(this);

    DbManager conn;
    model = new QsqlQueryModel();
    conn.connopen();
    QsqlQuery* query = new QsqlQuery(conn.mydb);
    QsqlQuery* query2 = new QsqlQuery(conn.mydb);

    query->prepare("SELECT f.name AS Name,f.quantityperpack AS Menge_pro_Pack,f.unit AS Einheit,c.amount AS Menge FROM Contains c,Food f WHERE c.ListId=:listId AND c.FoodId = f.FoodId");
    query->bindValue(":listId",listId);
    query->exec();
    model->setQuery(*query);
    ui->tableView->setModel(model);


    query2->prepare("SELECT name FROM lists WHERE ListId=:listId AND c.FoodId");
    query2->bindValue(":listId",listId);
    query2->exec();
    query2->next();
    ui->textbrowser ->setText(query->value(0).toString());

    conn.connClose();
}

当我点击这个按钮时,它应该改变值

void ListDialog::on_pushButton_plus_clicked(){
    //get Index of selected Row
    //add 1 to the amount column in this row
}

我是 qt 新手,感谢您的帮助。

解决方法

要在按钮处理代码中回答“如何获取所选行的行索引”的问题,请添加如下内容:

QModelIndexList indexes = ui->tableView->selectionModel()->selectedRows();
if( indexes.count() > 0 ){
    // indexes[0].row()     // will return the row-index of the first selected row
}

为确保一次只能选择一行,设置 tableView 为:

ui->tableView->setSelectionMode(QAbstractItemView::SingleSelection);
ui->tableView->setSelectionBehavior(QAbstractItemView::SelectRows);

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。