今天用Qt写了个串口工具,一个窗口上面一个QTextBrowser负责显示串口输出的内容,但是当代码写好之后,发现QTextBrowser里面的内容不能自动滚动,导致串口内容输出不能及时看到,必须下拉右边的scrollbar.于是,就写了个SLOT来处理这个问题.核心代码如下:
连接SIGNAL和SLOT:
1
|
connect(ui->textBrowser, SIGNAL(cursorPositionChanged()),
this
, SLOT(autoScroll()));
|
cursorPositionChanged()信号是QTextBrowser自带的,那么只需要写autoScroll()槽函数,其主要功能就是获取QTextBrowser的光标位置,置于内容最后即可.
1
2
3
4
5
|
void
YComWindow::autoScroll() {
QTextCursor cursor = ui->textBrowser->textCursor();
cursor.movePosition(QTextCursor::End);
ui->textBrowser->setTextCursor(cursor);
}
|
QTextBrowser的拖动条学习笔记
#include <QTextBrowser>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QTextBrowser *QtbTest = new QTextBrowser;
QtbTest->setText(
"1\n2\n3\n1\n2\n3\n1\n2\n3\n1\n2\n3\n1\n2\n3\n1\n2\n3\nabcdefghijklmnopqrstuvwxyz");
QtbTest->show();
return a.exec();
}
我的问题有两个
1.如何去掉上下的拖动条?因为在屏幕上手写操作时我们一般不提倡使用拖动条
2.如何在左右方向上加上拖动条?
问题1
qt2里的QTextBrowser和qt4里继承关系不一样了,Qt2里需要调用QScrollView的setHScrollBarMode函数,因为我主要使用的是qt4里自带的qt助手,这里介绍下qt4里我找到的内容
依次寻找类的继承关系并查找可能起作用的函数
QTextBrowser --- QTextEdit --- QAbstractScrollArea
在QAbstractScrollArea里有这么个函数
horizontalScrollBarPolicy : Qt::ScrollBarPolicy
This property holds the policy for the horizontal scroll bar.
The default policy is Qt::ScrollBarAsNeeded.
Access functions:
Qt::ScrollBarPolicy | horizontalScrollBarPolicy () const |
void | setHorizontalScrollBarPolicy ( Qt::ScrollBarPolicy ) |
See also verticalScrollBarPolicy.
verticalScrollBarPolicy : Qt::ScrollBarPolicy
This property holds the policy for the vertical scroll bar.
The default policy is Qt::ScrollBarAsNeeded.
Access functions:
Qt::ScrollBarPolicy | verticalScrollBarPolicy () const |
void | setVerticalScrollBarPolicy ( Qt::ScrollBarPolicy ) |
See also horizontalScrollBarPolicy.
可以看到分别是get和set的作用
其中关于 Qt::ScrollBarPolicy定义如下
enum Qt::ScrollBarPolicy
This enum type describes the various modes of QAbstractScrollArea's scroll bars.
Constant | Value | Description |
---|---|---|
Qt::ScrollBarAsNeeded | 0 | QAbstractScrollArea shows a scroll bar when the content is too large to fit and not otherwise. This is the default. |
Qt::ScrollBarAlwaysOff | 1 | QAbstractScrollArea never shows a scroll bar. |
Qt::ScrollBarAlwaysOn | 2 | QAbstractScrollArea always shows a scroll bar. |
(The modes for the horizontal and vertical scroll bars are independent.)
修改后的代码如下#include < QTextBrowser >
int main( int argc, char * argv[])
{
QApplication a(argc, argv);
QTextBrowser *QtbTest = new QTextBrowser;
QtbTest->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOn);
QtbTest->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
QtbTest->setText(
"1\n2\n3\n1\n2\n3\n1\n2\n3\n1\n2\n3\n1\n2\n3\n1\n2\n3\nabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz");
QtbTest->show();
return a.exec();
}
Vertical的拖动条的确是消失了,Horizon方向的虽然出来了,但是灰的,最后两行的数据我原来是想写到一行的。
2.
我觉得是跟个是跟文字排版格式有关,查了下还没查到相关的函数~continuing~~