如何选择QTableView的顶级项目

时间:2016-05-11 07:31:06

标签: qt qtableview qsortfilterproxymodel

我创建了如下的QTableView,并希望选择顶部项目作为默认选择。

proxyModel = new QSortFilterProxyModel(this);
    proxyModel->setSourceModel(d->model);

    d->ui->projects->setModel(proxyModel);
    d->ui->projects->setSortingEnabled(true);
    proxyModel->setFilterCaseSensitivity( Qt::CaseInsensitive );
    proxyModel->setFilterKeyColumn(-1);

    connect(d->ui->projects->model(),SIGNAL(dataChanged(QModelIndex,QModelIndex)),d,SLOT(selectTopOne()));
connect ( d->ui->search_phrase, SIGNAL( textChanged(QString)),
              proxyModel, SLOT( setFilterWildcard(QString)) );

请注意, d-> ui->项目代表我的QTableView。和 d-> ui->项目是用于抓取搜索字符串的文本编辑。

我尝试通过dataChanged signala调用Slot selectTopOne来选择我的表视图的顶部项目。但它并没有要求Slot。

我尝试用Qmodelindex(0,0)选择行。但它也没有用。

编辑:

这就是我的QTableview现在如何出现。

enter image description here

这就是我需要做的。我需要自动选择第一行。

enter image description here

根据QTableview过滤的热门项目上的文字编辑。我当时也想选择顶级商品。

enter image description here

2 个答案:

答案 0 :(得分:1)

我希望这个答案可以帮到你。

ui.tableView->selectRow(0);
ui.tableView->setFocus();

答案 1 :(得分:0)

为什么使用dataChange()信号来设置默认选择?我是否正确你想在启动程序时默认选择顶级项目?您可以使用选择模型,例如:

 d->ui->projects->selectionModel()->select(d->ui->projects->model()->index(0,0), QItemSelectionModel::Select);

编辑后:

好的,我知道了。决定(例如)是QSortFilterProxyModel类的继承。在那里你可以使用一些SLOT,当你在setFilterRexExp()中更改文本时,这些SLOT将使用QLineEdit(或者可能是其他可能)。之后从这个SLOT发送一些SIGNAL,你可以从你的主类中捕获并调用我写的上层方法,它选择第一项。或者,如果您不使用模型索引的数据,请执行以下操作:

d->ui->projects->setCurrentIndex(d->ui->projects->model()->index(0,0));