QWidget调整大小问题
QWidget resizing problems
我为以下问题奋斗了几个小时。
部件A
是QLabel
对象的QHBoxLayout
容器。我想把这样的小部件放在其他小部件中,高度恒定等于A
的高度,最小宽度等于A
的宽度(但宽度可以改变)。
在A
构造函数我有以下代码:
QHBoxLayout* mLayout = new QHBoxLayout();
for (auto e : wordsList)
mLayout->addWidget(e);
mLayout->setSpacing(0);
mLayout->setMargin(0);
mLayout->setSizeConstraint(QLayout::SetFixedSize);
setLayout(mLayout);
还有B
的主体:
class B : public QWidget
{
Q_OBJECT
public:
explicit B(A *a0, QWidget *parent = 0)
: QWidget(parent),
a(a0)
{
a->setParent(this);
setSizePolicy(QSizePolicy());
setFixedSize(sizeHint());
}
QSize minimumSize() const
{
return a->size();
}
QSize sizeHint() const
{
return minimumSize();
}
private:
A *a;
};
在main()
中我在B
的实例上调用show()。实际上,我得到了一个大的,完全可调整大小的窗口,比A
大。A
是冻结的,不能和B
一起调整大小。
我想让B
以与A
相同的大小开始,并且只能水平调整大小(但最小宽度等于A
)。
我怎样才能做到这一点?
为什么setSizePolicy()
和setFixedSize()
, minimumSize()
甚至sizeHint()
都不起作用?
这是因为我使用B
作为主窗口吗?
如果我在B
中使用布局,这可能应该是另一个QHBoxLayout
。但是当他有太多的空间时,他适合他的组件,所以我需要使用QSpacerItem
并在B
调整大小时始终调整他的大小。但我不知道顺序,在哪个小部件正在接收QResizeEvent
:如果B
在我的间隔器之前得到它,我将什么也不做。我可能可以使用eventFilter
,但仍然,这太复杂了(我需要的行为是相当简单的!)。
我认为没有必要继承B,你可以在B中添加一个布局,然后在布局中添加a:
QWidget * widgetB = new WhateverWidgetYouWant();
QHBoxLayout* layoutForB = new QHBoxLayout();
widgetB->setLayout(mLayout);
layoutForB->addWidget(pointerToA);
你需要的是将A的大小策略更改为expand或preferred,或者尝试其他一些策略。您可以在设计器中进行测试,当您对结果感到满意时,您可以获得正确的属性并在代码中设置它们。
相关文章:
- 警告处理为错误这里有什么问题
- 最小硬币更换问题(自上而下方法)
- 我的C++程序有问题.涉及动态调整整数数组的大小
- OPENCV C 调整问题
- 调整动态数组大小时保留用户输入的值的问题
- 调整TAB大小控制闪烁问题
- 特征,实现阻尼伪逆时的矩阵大小调整问题
- 滚动条缩略图跟踪长度 基于图像的水平适合调整窗口大小时出现问题
- 当在拖动/调整窗口大小的同时对窗口调用isActive()时,返回false.(X11,问题5.4.0)
- 调整窗口大小后交换渲染缓冲区会导致问题
- 用std::vector编写可调整大小的矢量时出现问题
- 问题:如何在调整centralwidget的大小时使mainWindow自动调整大小
- 在wxGLCanvas上调整大小之前初始化着色器时出现问题
- QWidget调整大小问题
- 滚动区域中的大小调整问题
- gpu的问题:调整大小
- 动态数组调整大小函数问题
- 为调整堆栈大小分配内存时出现问题
- Qt调整窗口大小以适应滚动区域问题中的纵横比
- 大型应用程序插件中的CEF关闭/调整大小问题