我正在编程某种通讯录。在我的应用程序的左侧,我有一个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();
最佳答案
您可以连接到QSqlTableModel的rowsInserted信号;每次在模型中插入新行时都应触发它。在相应的插槽中,使用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);
}
}
希望这会有所帮助,问候