我们在用QTextEdit文本框时,总会遇到这样的问题,随着文字的增多,想让文本框也跟着变动,但是只让他的高度变动,而宽度不变。
其实在QTextDocument中存在一个函数 void QTextDocument::adjustSize(),他可以跟随文本字数的变动从而调整大小,但是,这会导致,宽度也会变化,基于此,我们只需重新设置高度即可。
CMyTextEdit.cpp(主要函数) CMyTextEdit继承于QTextEdit
void CMyTextEdit::slotContentAdjust()
QTextDocument *document = qobject_cast<QTextDocument *>(sender());
if(document)
QTextEdit *edit = qobject_cast<QTextEdit*>(document->parent()->parent());
if(edit)
int Area = document->size().width() * document->size().height();
int NewHeight = Area / this->width();
NewHeight = NewHeight < document->size().height() ? document->size()->height() + 5 : NewHeight + 5;
edit->setFixedHeight(NewHeight);
Widget.cpp
CMyTextEdit *m_text = new CMyTextEdit(this);
m_text->setFixedSize(300,100);
m_text->show();
connect(m_text->document(),&QTextDocument::contentsChanged,this,CMyTextEdit::slotContentAdjust);
参考:https://blog.csdn.net/plilop/article/details/114229110
可以使用setFont()函数设置字体,使用setTextColor()函数设置文本颜色,使用setTextBackgroundColor()函数设置文本背景色,或者使用insertHtml()函数插入HTML标签。要设置QTextEdit的文本内容,可以使用setText()函数或insertPlainText()函数。可以使用cut()函数实现剪切操作,使用copy()函数实现复制操作,使用paste()函数实现粘贴操作。要获取QTextEdit的文本内容,可以使用toPlainText()函数。
QTextDocument *document = _uiLabel->NoteEdit->document();
_uiLabel->NoteEdit->setFixedHeight(document->size().height() + 20);
找了半天,终于解决了QTextbrowser高度自适应问题,一段代码,我需要的仅是以下代码,仅参考,若要使用,请使用文章后面的代码,利用信号与槽,完美解决。
ui->textBrowser->document()->adjustSize();//将文档调整到合理的大小。
int newheight = ui->textBrowser->document()-...
在很多时候,我们需要Qt TextEdit控件的大小可以根据字体的大小进行自动调整。为了达到该目的,往往使用adjustSize进行调整。但是存在当宽度固定时,想高度自动变大,该函数就无法满足了。该函数主要是自动生成自适应的宽度和高度,该宽度和高度是随机的。因此我们可以换一个角度来实现,虽然高度和宽度是随机,但是总的面积是不变的,该面积是可以包含所有内容。以下是实现代码,是根据网上提供的代码进行修改的。
#include "widget.h"
#include "ui_widget.h"
Widget
Qt初学者,想要用label控件实现一个用于显示文字信息的文本框,要求文字自动换行、label高度随内容调整、上下可滚动。
为了实现滚动,使用ScrollArea控件,将要显示文字的label放到这个ScrollArea里,然后设置ScrollArea的布局(水平或竖直都可,根据自己需要),这样的话label就能占满整个ScrollArea了。
实现自动换行,可以在ui designer设置:
或者代码设置:
ui->label0->setWordWrap(true);
实现高度随内容调整:
在 qss 中 -1px 表示由系统决定部件大小(如height、width)。
QLineEdit {
min-width: 120px; max-width: 120px;
QTableWidget QLineEdit {
min-width: -1px; max-width: -1px;
之前用Qt做了个截图工具,最值得一写的就是在图片中添加文字时,如何让QTextEdit自适应文本的宽高
值得参考的是这篇博客:https://blog.csdn.net/kaida1234/article/details/80094175
但也只是做到了宽度自适应,高度并没有这里的核心函数是void QTextDocument::adjustSize(),它他可以跟随文本的变动调整大小,然后通QSizeF QTextDocument::size()可以获取准确的文本尺寸,接着根据此尺寸调整编辑框的宽高,从而
取消内容选中
我想设置QTextEdit在focusOut时取消之前被选中的内容。QTextEdit拥有cursor position和anchor position两个position(加前缀用于区分),在没有内容选中时,两者的位置是一样的;反之当有内容选中时,两者分别位于选中内容的两端。QTextEdit没有提供设置anchor的函数,所以通过移动cursor position使两者重新到达同一位置即可。然而经过以下几种办法,皆没有反应,记录在此,以后找原因。
int nPos = ui->tex
我们知道,通过Qt的各种Layout可以实现控件的自动布局。
但是在使用Qt Designer创建的UI时,发现UI始终是设计时的样子,无法随着容器的放大缩小自适应地变化。
通过之前对ui的.h文件进行分析,我们知道Qt在生成ui代码时,根据最外层的Layout自动添加一个了Widget:
/** 这个Widget在UI设计时是没有的,是Qt为了方便组合其他的组件而且自动创