代码之家  ›  专栏  ›  技术社区  ›  atamanroman

QT布局问题

  •  0
  • atamanroman  · 技术社区  · 14 年前

    我实现了一个小部件,它基本上是一个按钮列表(代表一个文件结构)。看起来是这样的:

    [[recentFolder]    // bar 
    [(stretch)
    [folderA],         // foo
    [folderB],         // programs
    [folderC],         // c:
    (stretch)]
    [rootDir]]         // my computer
    

    我希望你能看到我的布局中的三个小部件:顶部的最新文件夹的FutelPutt,底部的根文件夹的FaldBut纽和一个在中间显示许多FrutelBut纽的小部件。所有文件夹按钮都是固定的宽度和高度。我在中心小部件的顶部/底部添加了拉伸区域,因为这是唯一可以调整大小的小部件(在高度上扩展策略)。但是当我调整父窗口小部件的大小时,它看起来是这样的:

    [[recentFolder]    // bar
    // empty space does not
    // belong to any child
    [(stretch)
    [folderA],         // foo
    [folderB],         // programs
    [folderC],         // c:
    (stretch)]
    // empty space does not
    // belong to any child
    [rootDir]]         // my computer 
    

    这意味着中心小部件根本没有任何调整大小的事件。我需要这样调整大小:

    [[recentFolder]    // bar
    [
    // child was resized
    (stretch)
    [folderA],         // foo
    [folderB],         // programs
    [folderC],         // c:
    (stretch)
    // child was resized
    ]
    [rootDir]]         // my computer 
    

    正如你应该看到的,我的伸展区域完全没有效果,也不像我想象的那样工作。我来自.NET,错过了如何将控件停靠在父级中,使它们占用所有现有空间的方法。知道如何在Qt4中实现这一点吗?

    现在我打电话来 setGeometry() 在我的中心,父级调整事件中的子级可以正常工作,但会绕过布局管理器。

    1 回复  |  直到 14 年前
        1
  •  1
  •   atamanroman    14 年前

    QVBoxLayout* layout = new QVBoxLayout();
    this->setLayout(layout);
    layout->addWidget(recent, 0, Qt::AlignTop | Qt::AlignCenter);
    layout->addWidget(list, 1, Qt::AlignTop | Qt::AlignCenter);
    layout->addWidget(root, 0, Qt::AlignTop | Qt::AlignCenter);
    

    QVBoxLayout* layout = new QVBoxLayout();
    this->setLayout(layout);
    layout->addWidget(recent);
    layout->addWidget(list);
    layout->addWidget(root);