我正在编写某种地址簿。在我的应用程序的左侧,我有一个 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);
}
}
希望这对你有帮助,问候
我是一名优秀的程序员,十分优秀!