C++ Qt:如何自动调整QTextEdit对象的大小

C++ Qt:如何自动调整QTextEdit对象的大小,c++,qt,C++,Qt,当文本字符串大于给定几何体时,如何自动调整QTextEdit对象的大小以自动调整其自身大小 在下面的示例中,我将QTextEdit框的几何体定义为100x100。但是,我想显示的文本字符串可能比这个大得多 void MainWindow::display_text() { QTextEdit *text = new QTextEdit(this); text->setWordWrapMode(QTextOption::NoWrap); text->setFon

当文本字符串大于给定几何体时,如何自动调整QTextEdit对象的大小以自动调整其自身大小

在下面的示例中,我将QTextEdit框的几何体定义为100x100。但是,我想显示的文本字符串可能比这个大得多

void MainWindow::display_text()
{
    QTextEdit *text = new QTextEdit(this);
    text->setWordWrapMode(QTextOption::NoWrap);
    text->setFontPointSize(24);

    /* Set the text box to be 100x100 */
    text->setGeometry(1, 1, 100, 100);

    /* The destination field may be too large to fit in the text box */
    QString arg = QString("Destination: %1").arg(destination);
    text->append(arg);

    text->show();
}

我希望文本字符串可见(即无滚动),并且单词包装已关闭。

您可以使用
QFontMetrics
计算该值

QFontMetrics fm(text->font());
QString myText = text->toPlainText();
int calcWidth = fm.width(myText);
int calcHeight = fm.height(myText);
从那时起,您可以使用这些值将几何图形设置为您喜欢的任何尺寸

text->setGeometry(1, 1, calcWidth, calcHeight);//Or whatever calculations you want

要在运行时更改大小,请使用信号和插槽,然后再次调用该代码
QTextEdit
有一个很好的
textChanged
信号,您可以使用
QFontMetrics
来计算它

QFontMetrics fm(text->font());
QString myText = text->toPlainText();
int calcWidth = fm.width(myText);
int calcHeight = fm.height(myText);
从那时起,您可以使用这些值将几何图形设置为您喜欢的任何尺寸

text->setGeometry(1, 1, calcWidth, calcHeight);//Or whatever calculations you want

要在运行时更改大小,请使用信号和插槽,然后再次调用该代码
QTextEdit
有一个很好的
textChanged
信号,你可以使用。

它是单行还是多行文本?另外,您希望它在键入时展开还是在以编程方式插入文本时展开?每个追加都应该是一行,必要时可以延伸到窗口的整个宽度。还将有多个附录,每一行。但我知道总共有多少条线,所以计算y轴几何体并不是严格必要的。此外,文本是以编程方式填充的。我不需要任何用户输入。它是单行还是多行文本?另外,您希望它在键入时展开还是在以编程方式插入文本时展开?每个追加都应该是一行,必要时可以延伸到窗口的整个宽度。还将有多个附录,每一行。但我知道总共有多少条线,所以计算y轴几何体并不是严格必要的。此外,文本是以编程方式填充的。我不需要任何用户输入。此解决方案用于查找宽度,但不会编译高度(?!)。我得到“错误:没有匹配的函数来调用”QFontMetrics::height(QString&)”。此外,fm似乎没有考虑setFontPointSize(24)。返回的像素大小明显小于应该的大小。但是如果我用像素乘以字体大小除以10,结果非常接近。因此它将是calcWidth*(24/10)。此解决方案用于查找宽度,但不会编译高度(?!)。我得到“错误:没有匹配的函数来调用”QFontMetrics::height(QString&)”。此外,fm似乎没有考虑setFontPointSize(24)。返回的像素大小明显小于应该的大小。但是如果我用像素乘以字体大小除以10,结果非常接近。因此,它将是calcWidth*(24/10)。