1

我正在编写某种地址簿。在我的应用程序的左侧,我有一个 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();
4

2 回答 2

1

您可以连接到 QSqlTableModel 的rowsInserted信号;每次将新行插入模型时都应该触发它。在相应的插槽中,使用列表视图的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);
    }
}

希望这会有所帮助,问候

于 2010-11-26T19:42:21.833 回答
0

来自 Qt 文档:

bool QSqlTableModel::insertRecord ( int row, const QSqlRecord & record )
Inserts the record after row. If row is negative, the record will be appended to
the end. 

你在订桌子吗?最后插入的项,不是表的最后一项吗?

使用以下方法获取 presisten 索引:

QModelIndex QAbstractItemModel::index ( int row, int column, const QModelIndex & parent = QModelIndex() ) 
int QAbstractItemModel::rowCount ( const QModelIndex & parent = QModelIndex() ) const

(如果您有 selectionmode Row ,则列不重要)

QPersistentModelIndex ( const QModelIndex & index )

在插入之前但在 submitAll() 之前;

并选择该行(如果您不介意更改当前索引,则不必为此使用选择模型)

void QAbstractItemView::setCurrentIndex ( const QModelIndex & index )

它也选择项目。

您还可以滚动以使新项目可见:

void QAbstractItemView::scrollTo ( const QModelIndex & index, ScrollHint hint = EnsureVisible )

编辑:不知道我之前怎么没看到订单....

于 2012-12-11T16:59:25.737 回答