QTableView和QSlider结合

QSlider和QScrollArea结合很简单,只需要如下绑定其QScrollBar成员就可以实现通过QSlider滑动界面以及指示当前界面位置。

    ui->verticalSlider->setSingleStep(ui->scrollArea->verticalScrollBar()->singleStep());
    ui->verticalSlider->setMaximum(ui->scrollArea->verticalScrollBar()->maximum());
    ui->verticalSlider->setMinimum(ui->scrollArea->verticalScrollBar()->minimum());
    connect(ui->scrollArea->verticalScrollBar(), SIGNAL(valueChanged(int)), ui->verticalSlider, SLOT(setValue(int)));
    connect(ui->verticalSlider, SIGNAL(valueChanged(int)), ui->scrollArea->verticalScrollBar(), SLOT(setValue(int)));在这里插入代码片

但是QTableView在一些情况下无法使用该方法,因为QTableView在其model变化时,会改变显示的内容。导致其QSrollArea成员是一直在变化的,最后尝试可行的方法是把QSlider的单步步长设为1,发现刚好是每步移动QTableView的一行,然后在每次刷新model后,获取当前QTableView的行数,那么QSlider的最长应该就是总的行数减去一页的行数(能移动的步数)。具体代码如下:

//根据日期查询数据更新表格
void Form_data_mearsure::tabV_refresh(const QDate &date)
{
    //更新表格
    model_tabV_MeasureData->clear();
    App::self()->m_dataAccess->selectMeasureData(date,model_tabV_MeasureData);
    model_tabV_MeasureData->sort(0,Qt::DescendingOrder);//倒序显示

    ui->verticalSlider->setSingleStep(1);
    if(ui->tableView->rowHeight(0) > 0)
        ui->verticalSlider->setMaximum(model_tabV_MeasureData->rowCount()-ui->tableView->height()/ui->tableView->rowHeight(0));
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值