我创建了如下的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现在如何出现。
这就是我需要做的。我需要自动选择第一行。
根据QTableview过滤的热门项目上的文字编辑。我当时也想选择顶级商品。
答案 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));