【问题标题】:Qt: How to adjust the size of a QTextEdit object automaticallyQt:如何自动调整 QTextEdit 对象的大小
【发布时间】:2017-05-23 21:27:58
【问题描述】:

当文本字符串大于给定的几何图形时,如何自动调整 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();
}

我希望文本字符串可见(即不滚动)并关闭自动换行。

【问题讨论】:

  • 是单行文本还是多行文本?另外,您是否希望它在键入时或以编程方式插入文本时扩展?
  • 每个追加都应该是一行,如有必要,可以延伸到窗口的整个宽度。还会有多个追加,每个追加一行。但我知道我将拥有多少条线,因此计算 y 轴几何形状并不是绝对必要的。此外,文本以编程方式填充。我不需要任何用户输入。

标签: c++ qt


【解决方案1】:

您可以使用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::height(QString&)”。
  • 另外,fm 似乎没有考虑 setFontPointSize(24)。返回的像素大小明显小于应有的大小。但如果我将像素乘以字体大小除以 10,结果非常接近。所以应该是 calcWidth*(24/10)。
猜你喜欢
  • 1970-01-01
  • 2023-03-26
  • 1970-01-01
  • 2011-03-04
  • 1970-01-01
  • 1970-01-01
  • 2021-09-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多