首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >QT5.3 QPlainTextEdit实现滚动锁

QT5.3 QPlainTextEdit实现滚动锁
EN

Stack Overflow用户
提问于 2014-09-09 15:04:40
回答 2查看 1.2K关注 0票数 2

我正在使用QT5.3和一个基于QPlainTextEdit的小部件。我总是在上面添加/插入文本。如果手动滚动内容,我希望锁定滚动,因此屏幕保持在相同的位置(内容继续追加/插入)。我在组件上添加/插入文本,方法是定位光标并使用插入文本/附录文本:

代码语言:javascript
复制
this->cursor.insertText(text, this->format);

有什么想法吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-09-09 16:52:10

我对这个问题的解决。

代码语言:javascript
复制
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

代码语言:javascript
复制
QTextCursor cursor(ui->plainTextEdit->textCursor());
cursor.insertText("A");
if(global)
    ui->plainTextEdit->verticalScrollBar()->setValue(ui->plainTextEdit->verticalScrollBar()->maximum());

现在我们接下来要做的是:当用户悬停(输入事件) plainTextEdit时,我们停止自动滚动,当用户离开小部件时,我们再次启用自动滚动。我是eventFilter做的,但我希望你能理解我的想法。

代码语言:javascript
复制
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);
} 
票数 2
EN

Stack Overflow用户

发布于 2014-09-13 08:14:52

试试这个。我想这就是你想要实现的。

代码语言:javascript
复制
QScrollBar *bar = plainTextEdit->verticalScrollBar();
bar->setValue(bar->maximum());
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25747963

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档