gpt4 book ai didi

c++ - QT 布局小部件调整大小

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:42:31 27 4
gpt4 key购买 nike

我在 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 设置最大高度,但这似乎不起作用。哦,每个小部件都包含一个 QVBoxLayout,其中插入了标题和 QtextEdit,然后小部件列表是另一个 QVBoxLayout,其中插入了所有小部件。

编辑:按要求添加了一些源代码

构造函数:

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]);

}

最佳答案

您正在为您的小部件设置固定的垂直尺寸策略。这就是为什么当您将文本编辑隐藏在其中时,它们不会缩小。如果您想限制小部件的高度,请使用 QWidget::setMaximumHeight

这是一个小的工作示例:

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QLayout>
#include <QLabel>
#include <QPushButton>
#include <QTextEdit>

MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
centralWidget()->setLayout(new QVBoxLayout);
centralWidget()->layout()->setAlignment(Qt::AlignTop);

for(int i = 0; i < 10; i++)
{
QWidget *widget = new QWidget;
widget->setMaximumHeight(200);
widget->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Maximum);
QVBoxLayout *w_layout = new QVBoxLayout;
widget->setLayout(w_layout);
QHBoxLayout *top_layout = new QHBoxLayout;
top_layout->addWidget(new QLabel("Title"));
QPushButton *toggle_button = new QPushButton("Toggle");
top_layout->addWidget(toggle_button);
toggle_button->setCheckable(true);
QTextEdit *text_edit = new QTextEdit;
connect(toggle_button, SIGNAL(clicked(bool)), text_edit, SLOT(setHidden(bool)));
w_layout->addLayout(top_layout);
w_layout->addWidget(text_edit);

centralWidget()->layout()->addWidget(widget);
}
}

MainWindow::~MainWindow()
{
delete ui;
}

单击按钮将隐藏或显示小部件的文本编辑。如果隐藏文本编辑,小部件将缩小;如果显示,小部件将展开。

关于c++ - QT 布局小部件调整大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26401979/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com