c – 使用QToolBox,哪个设置只有页面的内容大小?

前端之家收集整理的这篇文章主要介绍了c – 使用QToolBox,哪个设置只有页面的内容大小?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在尝试查找设置或大小策略,以便我的QToolBox实例中的每个页面仅占用其内容所需的空间.我已尝试在实例和每个页面属性中看到的所有内容.

我是否误解了QToolBox小部件的功能或者只是错过了正确的设置?

我想要的是与Qt Creator中的手风琴折叠式小部件类似的东西:

我似乎无法让这个“排序”页面只占用显示按钮和字段所需的大小.

解决方法

不幸的是,你不能直接这样做,因为它将跨越标题小部件不占用的所有可用空间.如果您知道页面的确切高度,可以通过在QToolBox上设置 fixed height来模拟您想要的内容.但你不想在实践中这样做.

如果您想要您所要求的行为,那么您需要编写自己的自定义控件.它不一定很难.使用QVBoxLayout并填充自定义类的项目,让我们称之为ToolItem,它是一个带有标题的QWidget(可能是一个显示/隐藏的按钮)和另一个用于显示可见或不可见内容的QWidget.

以下非常简单的示例将在单击ToolItem时切换其可见性.只有在可见时它才会占据任何空间.

class ToolItem : public QWidget {
public:
  ToolItem(const QString &title,QWidget *item) : item(item) {
    QVBoxLayout *layout = new QVBoxLayout;
    layout->setContentsMargins(0,0);
    layout->addWidget(new QLabel(title));
    layout->addWidget(item);    
    setLayout(layout);

    item->setVisible(false);
  }

protected:
  void mousePressEvent(QMouseEvent *event) {
    item->setVisible(!item->isVisible());
  }

private:
  QWidget *item;
};

class ToolBox : public QWidget {
public:
  ToolBox() : layout(new QVBoxLayout) {
    setLayout(layout);
  }

  void addItem(ToolItem *item) {
    // Remove last spacer item if present.
    int count = layout->count();
    if (count > 1) {
      layout->removeItem(layout->itemAt(count - 1));
    }

    // Add item and make sure it stretches the remaining space.
    layout->addWidget(item);    
    layout->addStretch();
  }

private:
  QVBoxLayout *layout;
};

简单的用法

QWidget *window = new QWidget;
window->setWindowTitle("QToolBox Example");

QListWidget *list = new QListWidget;
list->addItem("One");
list->addItem("Two");
list->addItem("Three");

ToolBox *toolBox = new ToolBox;
toolBox->addItem(new ToolItem("Title 1",new QLabel("Some text here")));
toolBox->addItem(new ToolItem("Title 2",list));
toolBox->addItem(new ToolItem("Title 3",new QLabel("Lorem Ipsum..")));  

QVBoxLayout *layout = new QVBoxLayout;
layout->addWidget(toolBox);

window->setLayout(layout);
window->resize(500,500);
window->show();

如果需要,您现在可以将其调整为QToolBox.

请不要犹豫,提出后续问题.

猜你在找的C&C++相关文章