c++ - 如何使用 Qt 扩展策略在布局中找到 QWidget 的真实高度?
问题描述
我的 Qt 程序有一个窗口,在窗口内部,有一个QVBoxLayout
布局。我QLabel
在布局中添加了Qt::Expanding
尺寸策略。这是代码。
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
QWidget* window = new QWidget();
QVBoxLayout* main_layout = new QVBoxLayout(window);
QLabel* label = new QLabel();
label->setStyleSheet("background-color: blue");
label->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
main_layout->addWidget(label);
window->resize(700, 700);
qDebug() << "height = " << label->height() << " width = " << label->width();
window->show();
return app.exec();
}
我想在窗口中有真实大小的 QLabel,所以我可以计算它的字体大小。但是当我尝试使用 获取大小时QLabel::height()
,无论窗口大小是多少,它总是给我相同的数字。例如,当窗口大小(700, 700)
为height = 480 width = 640
. 当我将窗口大小设置为(1000, 1000)
它打印相同。我怎样才能得到真正的价值QLabel
?
我还测试了 sizeHint,它的行为类似于height()
.
解决方案
问题是,QWidget::resize
如果小部件被隐藏,它不会立即调整小部件的大小:
如果小部件在调整大小时可见,它会立即收到一个调整大小事件 (resizeEvent())。如果小部件当前不可见,则保证在显示之前接收到事件。
因此,当小部件仍处于隐藏状态时,QLabel::height()
仍会返回其初始值,即QLabel::sizeHint()
.
QLabel::height()
致电后检查window->show()
应该可以解决您的问题:
...
window->show();
qDebug() << "height = " << label->height() << " width = " << label->width();
...
推荐阅读
- ios - 我们可以在模拟器上运行 ios release build 以进行自动化测试吗
- javascript - 如何在 Vue 的单个文件组件中使用那种 TypeScript?
- spring-boot - Spring Cloud Stream Configuration 类未加载
- c# - 检测视频上传 YouTube API
- android - Google Play 显示内部测试 生产中的新功能
- drupal-7 - 将默认值设置为输入字段drupal 7
- python - 如何将str转换为int?int() 和 float() 不起作用
- php - 无法在功能测试中设置查询字符串
- variables - 如何在 mxnet 中初始化符号变量
- wildfly - Drools 与 Java 11 的兼容性