为什么QPlainTextEdit光标移动导致滚动条移动时,不会触发滚动条的valueChanged信号
时间: 2023-11-22 16:52:50 浏览: 63
自绘图片列表,切换模式时滚动条设置无效问题
5星 · 资源好评率100%
在Qt中,QPlainTextEdit控件的滚动条是由QScrollBar控件实现的。当你移动光标时,QPlainTextEdit控件会自动滚动文本内容,从而导致滚动条的位置发生了变化,但是这种变化并不会触发滚动条的valueChanged信号。
如果你想在光标移动时也能够触发滚动条的valueChanged信号,可以重写QPlainTextEdit的scrollContentsBy()函数。这个函数会在控件滚动时被调用,你可以在这个函数中手动发射valueChanged信号,从而达到你想要的效果。
以下是一个示例代码:
```cpp
class MyPlainTextEdit : public QPlainTextEdit
{
public:
MyPlainTextEdit(QWidget *parent = nullptr) : QPlainTextEdit(parent) {}
protected:
void scrollContentsBy(int dx, int dy) override
{
QPlainTextEdit::scrollContentsBy(dx, dy);
QScrollBar *sb = verticalScrollBar();
if (sb)
emit sb->valueChanged(sb->value());
}
};
```
这个示例代码中,我们重写了QPlainTextEdit的scrollContentsBy()函数,在调用基类函数之后,手动发射了滚动条的valueChanged信号。这样,无论是鼠标滚轮滚动还是光标移动,都会触发滚动条的valueChanged信号。
阅读全文