gpt4 book ai didi

c++ - 如何在 QListView 中选择与底层 QSqlTableModel 的最后插入记录相对应的项目?

转载 作者:太空宇宙 更新时间:2023-11-04 12:22:27 25 4
gpt4 key购买 nike

我正在编写某种地址簿。在我的应用程序的左侧,我有一个 QListView 来显示我的联系人姓名。在我的应用程序的右侧,我有一个表格可以输入我的联系人的信息(例如姓名、地址、电话号码)。我将我的联系人数据存储在 QSqlTableModel 中。我使用 QListView 来显示 QSqlTableModel 的一列。

我的问题是:如何在我的 QListView 中自动选择与我的 QSqlTableModel 中最后插入的联系人相对应的项目?

这是我设置模型的方式:

QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
db.setDatabaseName("datenbank.db");

model = new QSqlTableModel(this, db);
model->setTable("demodaten");
model->setEditStrategy(QSqlTableModel::OnManualSubmit);
model->setSort(0, Qt::AscendingOrder);
model->select();

view->setModel(model);
view->setModelColumn(0);

这是我向模型添加新记录的方式:

QSqlRecord record = model->record();
for(int i = 0; i<record.count(); i++){
record.setValue(i, "");
}

record.setValue("codenummer", p.getCodeNummer());
record.setValue("vorname", p.getVorname());
record.setValue("nachname", p.getNachname());
record.setValue("geburtsdatum", p.getGeburtsdatum());

model->insertRecord(-1, record);
model->submitAll();

最佳答案

您可以连接到 rowsInserted你的 QSqlTableModel 的信号;每次将新行插入模型时都应触发它。在相应的插槽中,使用 ListView 的 selectionModel 选择插入的行方法。

在您的父部件标题中定义模型和插槽:

private:
QSqlTableModel *_model;

private slots:
void on_rowsInserted(const QModelIndex &source_parent, int start, int end);

在您的小部件构造函数中连接到模型的 rowsInserted 信号:

connect(_model, SIGNAL(rowsInserted(QModelIndex,int,int)), this, SLOT(on_rowsInserted(QModelIndex,int,int)));

可能的 on_rowsInserted 实现:

void YourParentWidget::on_rowsInserted(const QModelIndex &source_parent, int start, int end)
{
QModelIndex index = _model->index(start, 0);
if (index.isValid())
{
ui->listView->selectionModel()->clear();
ui->listView->selectionModel()->select(index, QItemSelectionModel::Select);
}
}

希望这对你有帮助,问候

关于c++ - 如何在 QListView 中选择与底层 QSqlTableModel 的最后插入记录相对应的项目?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4286598/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com