如何使 QTextEdit 小部件从我的程序滚动

How can I make a QTextEdit widget scroll from my program

本文关键字:我的 程序 滚动 何使 QTextEdit 小部      更新时间:2023-10-16

我有一个带有垂直滚动条的QTextEdit小部件。

report_text = new QTextEdit();
report_text->setAcceptRichText(true);
report_text->setReadOnly(true);
report_text->setTextInteractionFlags(Qt::NoTextInteraction);
report_text->setAlignment(Qt::AlignTop);
report_text->setWordWrapMode(QTextOption::NoWrap);
report_text->setFrameStyle(QFrame::NoFrame);
report_text->setMinimumSize(600, 380);
report_text->setSizePolicy(QSizePolicy::MinimumExpanding, QSizePolicy::Preferred);

这是Qt 4.8的嵌入式。

现在,我需要一种方法或事件,我可以发送到小部件,使其向上或向下滚动,就像按下滚动条上的向上或向下按钮一样。

我尝试了scroll()方法,但我滚动了整个小部件,包括滚动条。

我也尝试发送QWheelEvent,但没有任何反应。

QWheelEvent ev(QPoint(), 10, 0, 0);
report_text->setFocus();
QApplication::sendEvent(report_text, &ev);

我错过了什么?

这是我找到的合适解决方案:

可以使用QTextEdit::verticalScrollBar()方法访问垂直滚动条。

滚动条具有一种triggerAction()方法,可以方便地模拟用户与按钮和滑块的交互。可用操作在 QAbstractSlider 中定义。

所以生成的代码只有一行:

report_text->verticalScrollBar()->triggerAction(QAbstractSlider::SliderSingleStepAdd);

有趣的是,即使滚动条隐藏

report_text->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);

您提供的增量可能太小了。

QWheelEvent::delta()的文档:

返回滚轮旋转的距离,以八分之一为单位 度。正值表示滚轮向前旋转 远离用户;负值表示轮子是 向后旋转朝用户。

大多数鼠标类型以 15 度的步长工作,在这种情况下,增量 值是 120 的倍数;即 120 个单位 * 1/8 = 15 度。

以Qt为单位滚动的文本是整行数。因此,如果小部件计算出您要滚动0.9行,他可能什么都不做。

所以再试一次

QWheelEvent ev(QPoint(), 120, 0, 0);

注意:此处的任何内容都不适用于具有控制或移位修饰符的事件。

相关文章: