qtextedit - изменить размер, чтобы соответствовать - PullRequest
12 голосов
/ 01 марта 2012

У меня есть QTextEdit , который действует как "displayer" (редактируемый в false).Текст, который он отображает, завернут в слово.Теперь я хочу установить высоту этого текстового поля так, чтобы текст точно соответствовал (при этом также учитывалась максимальная высота).

В основном виджет (в том же вертикальном расположении) под макетом должен занимать столько же местанасколько это возможно.

Как этого можно достичь наиболее легко?

Ответы [ 5 ]

10 голосов
/ 08 января 2015

Я нашел довольно стабильное, простое решение, используя QFontMetrics!

from PyQt4 import QtGui

text = ("The answer is QFontMetrics\n."
        "\n"
        "The layout system messes with the width that QTextEdit thinks it\n"
        "needs to be.  Instead, let's ignore the GUI entirely by using\n"
        "QFontMetrics.  This can tell us the size of our text\n"
        "given a certain font, regardless of the GUI it which that text will be displayed.")

app = QtGui.QApplication([])

textEdit = QtGui.QPlainTextEdit()
textEdit.setPlainText(text)
textEdit.setLineWrapMode(True)      # not necessary, but proves the example

font = textEdit.document().defaultFont()    # or another font if you change it
fontMetrics = QtGui.QFontMetrics(font)      # a QFontMetrics based on our font
textSize = fontMetrics.size(0, text)

textWidth = textSize.width() + 30       # constant may need to be tweaked
textHeight = textSize.height() + 30     # constant may need to be tweaked

textEdit.setMinimumSize(textWidth, textHeight)  # good if you want to insert this into a layout
textEdit.resize(textWidth, textHeight)          # good if you want this to be standalone

textEdit.show()

app.exec_()

(Простите, я знаю, что ваш вопрос касается C ++, и я использую Python, но в Qt онивсе равно одно и то же).

2 голосов
/ 01 марта 2012

Если для возможностей QTextEdit не требуется что-то особенное, то QLabel с включенной переносом слов будет выполнять именно то, что вы хотите.

1 голос
/ 01 марта 2012

Текущий размер нижележащего текста может быть доступен через

QTextEdit::document()->size();

, и я считаю, что с помощью этого мы могли бы соответственно изменить размер виджета.

#include <QTextEdit>
#include <QApplication>
#include <iostream>
using namespace std;

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    QTextEdit te ("blah blah blah blah blah blah blah blah blah blah blah blah");
    te.show();
    cout << te.document()->size().height() << endl;
    cout << te.document()->size().width() << endl;
    cout <<  te.size().height() << endl;
    cout <<  te.size().width() << endl;
// and you can resize then how do you like, e.g. :
    te.resize(te.document()->size().width(), 
              te.document()->size().height() + 10);
    return a.exec();    
}
0 голосов
/ 11 октября 2015

В моем случае я поместил свой QLabel в QScrollArea. И если вы увлечены, вы комбинируете оба и создаете свой собственный виджет.

0 голосов
/ 03 марта 2015

Говоря о Python, я действительно нашел .setFixedWidth( your_width_integer ) и .setFixedSize( your_width, your_height ) весьма полезными.Не уверен, что C имеет похожие атрибуты виджета.

...