c++ - Qt 5.3 QPlainTextEdit 实现滚动锁

标签 c++ qt qplaintextedit

我正在使用 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);
} 

关于c++ - Qt 5.3 QPlainTextEdit 实现滚动锁,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25747963/

相关文章:

c++ - 强制 QPlainTextEdit 大写字符

qt - PyQt:如何将光标重置为任何悬停的光标

c++ - vtables 和 this 指针

c++ - 使用 GTK 和 C++ 播放音频文件

c++ - 在 C++ Microsoft Visual Studio 2010 中调试多个环境变量

qt - `GLIBC_2.14' 未找到

c++ - QtPlugins 实现多个接口(interface)并转换为通用接口(interface)

Qt 显示/隐藏小部件动画

c++ - C++上INT16的二进制写法

qt - 如何使用 QPlaintTextEdit 有效地创建固定宽度的列记录器?