如何使 QTextEdit 小部件从我的程序滚动
How can I make a QTextEdit widget scroll from my program
我有一个带有垂直滚动条的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);
注意:此处的任何内容都不适用于具有控制或移位修饰符的事件。
相关文章:
- 当我在main中声明了我的2d数组时,为什么我的程序会退出
- 为什么我的程序在for循环中k=0时返回垃圾值
- 为什么它只打印双链接列表的第一个值,而我的程序却崩溃了
- 我的程序没有从文件中读取并输入数据
- 为什么我的C++程序的程序集输出充满了 .ascii,没有汇编代码?
- 我的程序有一个保存配置文件的GUI,如何双击此配置文件以直接加载带有配置数据的GUI?
- 为什么我的程序不能显示斐波那契级数?
- 为什么我的程序在使用预留后没有加速?
- 为什么如果我添加这一行,我的程序会不断询问值
- 为什么当我输入较大的数字时,我的程序会到达文件末尾?
- 这是使用回溯的 nqueen 问题,但我使用了动态 2d 数组,我的程序编译良好,但不返回任何输出
- 为什么我的程序在 O0 和 O2 的优化级别返回不同的结果
- 为什么我的 c++ 程序检查不是初始化的变量?
- 为什么我的程序在输入某个形状的面积的测量值后没有结束?
- 在 fork() 之后,我在我的程序中不断得到相同的 pid
- C++ - 为什么我的程序在再次调用函数后关闭?
- 我的程序将 26 个字母转换为 ascII 没有显示正确答案
- 为什么我的程序在读取/写入文件时会删除最重要的数字?
- 我需要如何更改我的程序以使用打开/关闭原则?
- 我的 c++ 程序似乎没有发现字符串和我拥有但输入使用 getline 的变量之间的比较