问题5.3 QPlainTextEdit实现滚动锁定
Qt 5.3 QPlainTextEdit implement scroll lock
我使用的是Qt 5.3和一个基于QPlainTextEdit
的小部件。我一直在上面添加/插入文本。如果我手动滚动内容,我想锁定滚动,这样屏幕就保持在同一个位置(内容继续被添加/插入)。我通过定位光标并使用insertText/appendText:在组件上添加/插入文本
this->cursor.insertText(text, this->format);
有什么想法吗?
我的这个问题的解决方案。
ui->plainTextEdit->insertPlainText("A");//this doesn't have auto scroll
if(global)//global is bool variable, if it is true, we autoscroll to the bottom
ui->plainTextEdit->verticalScrollBar()->setValue(ui->plainTextEdit->verticalScrollBar()->maximum());//we auto scroll it everytime
或
QTextCursor cursor(ui->plainTextEdit->textCursor());
cursor.insertText("A");
if(global)
ui->plainTextEdit->verticalScrollBar()->setValue(ui->plainTextEdit->verticalScrollBar()->maximum());
现在我们做下一步:当用户悬停(输入事件)plainTextEdit时,我们停止自动滚动,当用户离开小部件时,我们再次启用自动滚动。我通过eventFilter做到了这一点,但我希望你能理解我的想法。
bool MainWindow::eventFilter(QObject *obj, QEvent *event)
{
if(obj==ui->plainTextEdit && (event->type()==QEvent::Enter || event->type()==QEvent::Leave))
{
if(event->type()==QEvent::Enter)//user move mouse on widget:stop auto-scrolling
global =false;
else
global =true;// leave event:enable auto-scrolling
ui->label->setText(event->type()==QEvent::Enter ? "Hovering" : "Not Hovering");//just show it to user, you can delete this line
}
return QObject::eventFilter(obj, event);
}
试试这个。我认为这就是你想要实现的。
QScrollBar *bar = plainTextEdit->verticalScrollBar();
bar->setValue(bar->maximum());
相关文章:
- 使用一个考虑到std::map中键值的滚动或换行的键
- 如何找到锁定Linux futex的C++行
- G锁定铸造到基础上会释放模拟行为
- 如何检查线程是否锁定
- 如何在C++中找到active directory中禁用和锁定的窗口帐户
- 我应该在锁定TBitmap画布后解锁它吗
- QScrollArea:由垂直滚动条引起的水平滚动条
- 跟踪滚动条上的鼠标事件
- 如何在不使用滚动条的情况下使视图更改
- 如何为对象生成滚动效果?
- 如何模拟不同边数的骰子滚动?
- 如何初始化升压滚动窗口累加器?
- C++ 11 中的锁定是否保证访问数据的新鲜度?
- 在两个线程上读/写 64 位,无互斥/锁定/原子
- 实现包含多个 QQuickPaintedItems 的 QQuickView 的滚动
- 如何在实时应用程序中锁定线程
- 通过水平滚动条更改标签
- 如何在C++中滚动锁定报表样式列表视图的第一列
- 问题5.3 QPlainTextEdit实现滚动锁定
- 我如何打开/关闭大写锁定,滚动锁定,数字锁定键编程