我正在使用 Qt 5.3 和一个QPlainTextEdit
基于小部件。我一直在上面附加/插入文本。如果我手动滚动内容,我想锁定滚动,因此屏幕保持在同一位置(内容继续被附加/插入)。我通过定位光标并使用 insertText/appendText 在组件上附加/插入文本:
this->cursor.insertText(text, this->format);
有任何想法吗?
我正在使用 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());