我有一個用於搜索和排序的自定義QSortFilterProxyModel以及用於填充表的QSqlQueryModel的QTableView。動態調整大小後QTableView滾動停止
void ProxyModel::searchTable(QString name, QString type, QString date, QString time){
if(name_ != name)
name_ = name;
if(type_ != type)
type_ = type;
if(date_ != date)
date_ = date;
if(time_ != time)
time_ = time;
invalidateFilter();
}
bool ProxyModel::filterAcceptsRow(int source_row,
const QModelIndex &source_parent) const{
QModelIndex indName = sourceModel()->index(source_row,
0, source_parent);
QModelIndex indType= sourceModel()->index(source_row,
4, source_parent);
QModelIndex indDate = sourceModel()->index(source_row,
2, source_parent);
QModelIndex indTime = sourceModel()->index(source_row,
3, source_parent);
if(
sourceModel()->data(indName).toString().toLower().contains(name_.toLower())
&&sourceModel()->data(indType).toString().toLower().contains(type_.toLower())
&&sourceModel()->data(indDate).toString().toLower().contains(date_.toLower())
&&sourceModel()->data(indTime).toString().toLower().contains(time_.toLower())
)
{
emit adjust();
return true;
}
return false;
}
搜索成功後,我發出信號,從我的代理模式,它調整工作臺的高度以適合行的大小的槽。 connect(proxyModel,SIGNAL(adjust()),this,SLOT(dataChanged()));
而當搜索按鈕被點擊
連接(UI-> searchBtn,& QToolButton ::點擊的,這一點,& AllVisitedPlaces :: getSearchOptions);
我打電話與搜索代理模型searchTable方法參數
void AllVisitedPlaces::getSearchOptions()
{
proxyModel->searchTable(ui->nameLineEdit->text(),
ui->typeLineEdit->text(),
ui->dateLineEdit->text(),
ui->timeLineEdit->text());
adjustTableSize();
}
void AllVisitedPlaces::dataChanged()
{
adjustTableSize();
this->verticalHeader->setSectionResizeMode(QHeaderView::ResizeToContents);
}
void AllVisitedPlaces::adjustTableSize()
{
QRect rect = ui->table->geometry();
int height = 0;
for (int i =0; i < proxyModel->rowCount() ; i++)
height+= ui->table->rowHeight(i);
rect.setHeight(18 + ui->table->horizontalHeader()->height() + height);
ui->table->setGeometry(rect);
verticalHeader->setSectionResizeMode(QHeaderView::Stretch);
}
的問題是,當表重新大小,我失去了滾動。 我該如何解決這個問題? 調整大小後:
我的TableView已經在gridLayout中。 但是你是對的,setGeometry()是什麼導致了這個問題。 我在表格佈局下添加了一個垂直間隔,並將佈局拉伸爲[10:1],然後我使用setMaximumHeight()來代替它。 我還刪除了冗餘/錯誤代碼,以更改模型數據中的每個更改的大小,並在所有新數據加載後調用adjustTableSize()。 謝謝,請原諒我,我只是一個初學者。 –