【发布时间】:2014-10-16 10:23:26
【问题描述】:
我在 QT 中的布局有问题。我试图实现一个可以通过以下方式扩展和收缩的小部件列表:
|------------| |------------|
|Title 1 | |Title 1 | Widget1
|------------| |------------|
|QTextEdit1 | Widget 1 |Title 2 |
| | |------------|
|------------|Which, by clicking on the title, contract: |QTextEdit2 | Widget2
|------------| | |
|Title 2 | |------------|
|------------|
|QTextEdit1 |
| | Widget 2
|------------|
问题是,目前我只能做到以下几点:(点击标题1后)
|------------|
|Title 1 |
|------------|
| |
| |
|------------|
|------------|
|Title 2 |
|------------|
|QTextEdit1 |
| |
|------------|
也就是说,我能够使我的第一个小部件的 QtextEdit 消失,保持标题高度不变(这很重要),但第二个小部件不会替换第一个 QTextEdit 留下的空间。就好像 QtextEdit 还在那里,第二个小部件不能占据那个空间。 ¿ 有谁知道如何解决这个问题?我觉得它并不复杂,但我环顾四周,我无法解决它。当我收缩它时,我尝试为 widget1 设置一个最大高度,但这似乎不起作用。哦,每个widget都包含一个QVBoxLayout,其中title和QtextEdit被插入,然后widget列表是另一个QVBoxLayout,所有widget都被插入其中。
已编辑:应要求添加了一些源代码
构造函数:
mainLayout = new QVBoxLayout;
QHBoxLayout *headerLayout = new QHBoxLayout;
title = new QLabel("My title!!");
m_arrowLabel->setPixmap(m_arrowDown);
m_activated = true;
title->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Fixed);
title->setMaximumHeight(16);
headerLayout->addWidget(title, 0, Qt::AlignLeft);
headerLayout->setContentsMargins(0,0,0,0);
textEdit = new QTextEdit;
textEdit->setReadOnly(true);
textEdit->setText("My text!!!");
textEdit->setMaximumHeight(textEdit->document()->size().height() + 50);
mainLayout->addLayout(headerLayout);
mainLayout->addWidget(textEdit);
mainLayout->setContentsMargins(QMargins(0,0,0,0));
this->setLayout(mainLayout);
鼠标按下事件:
event->accept();
if (event->buttons() & Qt::LeftButton)
{
if (m_activated)
{
m_activated = false;
textEdit->setVisible(false);
}else
{
m_activated = true;
textEdit->setVisible(true);
}
}
在我用小部件填充它的窗口上:
m_mainLayout = QVector<QVBoxLayout *> (10);
for (int i=0; i<m_mainLayout.size(); i++)
{
myWidget[i] = new myWidget;
myWidget[i]->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Fixed);
m_mainLayout->addWidget(myWidget[i]);
}
【问题讨论】:
-
你用什么来获取下图的?
QTextEdit1 ->setVisible(false)? -
我试过了,是的。还有QVBoxLayout.removeWidget(QTextEdit1),然后在展开时再次添加。但似乎都没有达到预期的效果。
-
你能简化你的问题并显示一些代码吗?
-
我无法重现此内容。你能发一些SSCCE吗?
-
您将小部件的垂直尺寸策略设置为
QSizePolicy::Fixed。这可能就是为什么在您将textEdit小部件隐藏在其中之后,您的小部件不会调整大小的原因。