我正在编程某种通讯录。在我的应用程序的左侧,我有一个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);
    }
}

希望这会有所帮助,问候

10-08 03:26