目前我个人在做项目中遇到的问题就是,在禁止掉水平,锤直的滑动条的情况下,输入的文本超出编辑框的时候,下面的文本会将上面的文本顶出编辑框的大小,显示不全, 具体解决,首先设置编辑器的属性为不能换行( this->setLineWrapMode(QTextEdit::NoWrap);)或者一直检查光标所在行的字符串的长度不能大于编辑器的宽度,因为QTextEdit控件是在输入的字符串的长度大于控件的宽度的时候,会自动的换行,这样处理,就是需要用户手动的敲回车键,进行换行,如此一来,就可以统计到目前输入的行数,从而达到控制文本的目的,下面是主要的代码:
在QTextEdit的信号textChanged()的槽函数中做一下操作:
int lineCount = this->document()->lineCount();
QTextDocument* textDocument = this->document();//获取指定textEdit位置
QTextCursor cursor;
cursor = this->textCursor();
int lineNumber = cursor.blockNumber();//获取光标所在列用cursor.columnNumber();
QTextBlock textBlock = textDocument->findBlockByLineNumber(lineNumber);//通过行号找到指定行 数据块
QString selectLine = textBlock.text();//将得到的数据存入一个字符串。
QFontMetrics fm(m_textFont);//字体大小
int pixelsWide = fm.width(selectLine); //根据字体大小计算光标所在行的字符串的长度
if (pixelsWide > this->width() - 22 || lineCount > 文本编辑器最大的行数)
{
this->setPlainText(m_textSub);
this->undo();
/*设置光标位置在最后*/
this->moveCursor(QTextCursor::End, QTextCursor::MoveAnchor);
}
else if(pixelsWide <= this->width() - 22(临界值,避免文本的长度达到编辑器的长度时,自动换行) && lineCount <= 文本编辑器最大的行数)
{
m_textSub = this->toPlainText();
}
目前我个人在做项目中遇到的问题就是,在禁止掉水平,锤子的滑动条的情况下,输入的文本查出编辑框的时候,下面的文本会将上面的文本顶出编辑框的大小,显示不全, 具体解决,首先设置编辑器的属性为不能换行(this->setLineWrapMode(QTextEdit::NoWrap);)或者一直检查光标所在行的字符串的长度不能大于编辑器的宽度,因为QTextEdit控件是在输入的字符串的长度大于控件的宽度的时候,会自动的换行,这样处理,就是需要用户手动的敲回车键,进行换行,如此一来,就可以统计到目前输入的行.
效果如下图所示:
之前尝试了一些其他方法,效果并不理想,比如:根据
edit
的滚动
条
的当前位置和最大值的差值,重新设置
edit
的高度,达到滚动
条
消失,高度自适应的效果。
最终解决方案:通过根据内容重新调整
edit
中document的大小,设置
edit
的高度,不需要进行数值计算了。
核心代码:
//之前的
Edit
高度
int oldHeight = t
ext
Edit
->height();
//调整文字高度并设置
当
QT
ext
Edit
中
输入
的文字长度过长,
QT
ext
Edit
就会出现滚动
条
。如果不想出现滚动
条
,而想
QT
ext
Edit
的高度随着文字的增加或减少而改变。
//widget.h
#ifndef WIDGET_H
#define WIDGET_H
#include <QWidget>
#include <QDebug>
#include <
QT
ext
Edit
>
完成了什么:
一个简单的菜单栏,带有标准的“文件”和“编辑”菜单
一个T
ext
Area小部件,用户可以在其中编写一些限制为140个字符的
文本
(达到限制时-StatusBar上会
显示
一
条
相对消息)
工具栏,允许用户修改选定的
文本
StatusBar的其他信息,例如:。 项目名称。 一个用户。 用户
输入
的字符数
状态栏,
显示
常规消息(菜单操作悬停和140限制通知)以及一些其他信息
它可以记住M
实现代码如下:
m_ListWidget = new QListWidget(m_backgroud);
m_ListWidget->setViewMode(QListView::ListMode);
m_ListWidget->setFlow(QListView::LeftToRight);//将从左到...
QScrollArea 最主要的方法在于,
简单来说就是设置画布的意思,通常我们在使用的时候需要先把需要的控件放到一个画布里。而QScrollArea 就类似于我们拿着一个放大镜去观察这个画布。所以想要出现滚动
条
,画布的大小一定要比QScrollArea 大!
以下代码示例:
最后,我们还可以对滚动
条
禁用
。例如
禁用
横向滚动
条
:
效果图待添加: