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

时间:2015-06-18 08:53:41

标签: c++ qt

我有一个带垂直滚动条的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);

我错过了什么?

2 个答案:

答案 0 :(得分:2)

您提供的delta可能太小了。

来自QWheelEvent::delta()的{​​{3}}:

  

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

     

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

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

请再次尝试

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

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

答案 1 :(得分:1)

以下是我发现的合适解决方案:

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

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

因此生成的代码只有一行:

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

有趣的是,即使用

隐藏滚动条,这仍然有效
report_text->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);