滚动条一步到位
滚动条的设置,不停留在中间,只在两个端点停留
BUG !!!
这一节QT 多级表头的多级表头经过测试有个bug。如果有的列占据了两列的表头,那么在左右移动的过程中就会出现串列的现象。
这种情况!!!
把占据两列的改为一列,看这一列就很不方便。
但是我发现在两端的时候数据是正确的,也没有串列,那么就让滚动条只能停留在左右两端。
步骤1:修改步长
首先想到的就是修改步长,设置的足够大就可以一步到位。
1 2 3
| horizontalScrollBar->setRange(1,100); horizontalScrollBar->setPageStep(50); horizontalScrollBar->setSingleStep(50);
|
具体代码是这样的:
1 2 3 4 5 6 7 8 9 10 11
| verticalScrollBar = new QScrollBar(Qt::Vertical, this); ui.table_content->setVerticalScrollBar(verticalScrollBar); horizontalScrollBar = new QScrollBar(Qt::Horizontal, this); ui.table_content->setHorizontalScrollBar(horizontalScrollBar); ui.table_header->setHorizontalScrollBar(horizontalScrollBar); horizontalScrollBar->setRange(1,100); horizontalScrollBar->setPageStep(50); horizontalScrollBar->setSingleStep(50); ui.horizontalLayout->addWidget(verticalScrollBar); ui.verticalLayout->addWidget(horizontalScrollBar);
|
但是我发现怎么搞都不行。
原因就出在这两条:
1 2
| ui.table_content->setHorizontalScrollBar(horizontalScrollBar); ui.table_header->setHorizontalScrollBar(horizontalScrollBar);
|
再给两个表格设置上之后,就这么修改不起作用。
修改
1 2 3 4 5 6 7 8 9 10 11
| verticalScrollBar = new QScrollBar(Qt::Vertical, this); ui.table_content->setVerticalScrollBar(verticalScrollBar); horizontalScrollBar = new QScrollBar(Qt::Horizontal, this); horizontalScrollBar->setRange(minValue,maxValue); horizontalScrollBar->setPageStep(1000); horizontalScrollBar->setSingleStep(99); ui.horizontalLayout->addWidget(verticalScrollBar); ui.verticalLayout->addWidget(horizontalScrollBar); connect(horizontalScrollBar, SIGNAL(valueChanged(int)), ui.table_header->horizontalScrollBar(), SLOT(setValue(int))); connect(horizontalScrollBar, SIGNAL(valueChanged(int)), ui.table_content->horizontalScrollBar(), SLOT(setValue(int)));
|
这样确实是可以了。
拖动不可以
只要setPageStep设置的足够大,这样点击左右的箭头确实一步到位,但是在鼠标拖动的时候还是不行。
1 2 3 4 5 6 7 8 9 10
| verticalScrollBar = new QScrollBar(Qt::Vertical, this); ui.table_content->setVerticalScrollBar(verticalScrollBar); horizontalScrollBar = new QScrollBar(Qt::Horizontal, this); horizontalScrollBar->setPageStep(1000); ui.horizontalLayout->addWidget(verticalScrollBar); ui.verticalLayout->addWidget(horizontalScrollBar); connect(horizontalScrollBar, SIGNAL(valueChanged(int)), ui.table_header->horizontalScrollBar(), SLOT(setValue(int))); connect(horizontalScrollBar, SIGNAL(valueChanged(int)), ui.table_content->horizontalScrollBar(), SLOT(setValue(int))); connect(horizontalScrollBar, SIGNAL(valueChanged(int)), this, SLOT(onScrollBarValueChanged(int)));
|
步长不需要设置了。
槽函数:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| void AAAA::onScrollBarValueChanged(int value) { if (value != horizontalScrollBar->minimum() && value != horizontalScrollBar->maximum()) { if (value < (horizontalScrollBar->maximum() - horizontalScrollBar->minimum()) / 2) { horizontalScrollBar->setValue(horizontalScrollBar->minimum()); } else { horizontalScrollBar->setValue(horizontalScrollBar->maximum()); } } }
|
如果是某个值就让他成为最小或最大。
让滚动条只能停靠在左右两端。
这样拖动的时候只会跳到两端,setPageStep大一点显得更加稳定。