Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/149.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 具有自动缩放功能的QLabel_C++_Qt_Widget - Fatal编程技术网

C++ 具有自动缩放功能的QLabel

C++ 具有自动缩放功能的QLabel,c++,qt,widget,C++,Qt,Widget,我需要一个Qt小部件,它可以显示自动缩放的纯文本。这意味着,当我调整布局中包含此小部件的窗口大小时,字体大小将调整为小部件的大小,以尽可能大的字体显示文本,以适应布局指定的大小。换行是一个可能的好处 我想,有人已经实现了这样的小部件,但我无法用谷歌搜索它。您可以在窗口的调整大小事件中执行此操作: void MainWindow::resizeEvent(QResizeEvent*) { QFont f = label->font(); //Get label font Q

我需要一个Qt小部件,它可以显示自动缩放的纯文本。这意味着,当我调整布局中包含此小部件的窗口大小时,字体大小将调整为小部件的大小,以尽可能大的字体显示文本,以适应布局指定的大小。换行是一个可能的好处


我想,有人已经实现了这样的小部件,但我无法用谷歌搜索它。

您可以在窗口的调整大小事件中执行此操作:

void MainWindow::resizeEvent(QResizeEvent*)
{
    QFont f = label->font(); //Get label font

    QFontMetrics metrics(f);
    QSize size = metrics.size(0, label->text()); //Get size of text
    float factorw = label->width() / (float)size.width(); //Get the width factor
    float factorh = label->height() / (float)size.height(); //Get the height factor

    float factor = qMin(factorw, factorh); //To fit contents in the screen select as factor
                                           //the minimum factor between width and height

    f.setPointSizeF(f.pointSizeF() * factor); //Set font size
    label->setFont(f); //Set the adjusted font to the label
}
不知道是不是只有我(使用Qt5.7),但这会产生巨大的文本。这可能是由于文本的长度(这是计算的一部分),但也可能是由于其他因素,例如标签的大小调整策略。