我正在使用QT5.3和一个基于QPlainTextEdit的小部件。我总是在上面添加/插入文本。如果手动滚动内容,我希望锁定滚动,因此屏幕保持在相同的位置(内容继续追加/插入)。我在组件上添加/插入文本,方法是定位光标并使用插入文本/附录文本:
this->cursor.insertText(text, this->format);有什么想法吗?
发布于 2014-09-09 16:52:10
我对这个问题的解决。
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);
} 发布于 2014-09-13 08:14:52
试试这个。我想这就是你想要实现的。
QScrollBar *bar = plainTextEdit->verticalScrollBar();
bar->setValue(bar->maximum());https://stackoverflow.com/questions/25747963
复制相似问题