在 QHBoxLayout 中添加屏幕外的小部件以稍后显示

Posted

技术标签:

【中文标题】在 QHBoxLayout 中添加屏幕外的小部件以稍后显示【英文标题】:Add widgets off-screen in a QHBoxLayout to show later 【发布时间】:2018-04-10 20:10:28 【问题描述】:

我要做的事情基本上是一个包含三个项目的面板,中间一个具有屏幕大小(这里是 QScrollArea)。关键是我然后移动 QScrollArea 以根据需要显示左右项目,如下图所示。

在这里,左右选项卡应该是隐藏的,中间的文本编辑占据了整个滚动区域(滚动条在这里隐藏)。单击左侧和右侧标有“结构”和“选项”的按钮应滚动所述滚动区域并显示相应的选项卡。 Qt Designer 结构如下:

mrte_text 是我自己的所见即所得小部件的自定义类。这两个选项卡都是为我在MainWindow::show 添加的场合创建的临时小部件,代码如下:

void MainWindow::show()

    QHBoxLayout *l = (QHBoxLayout*)ui->scrollAreaWidgetContents->layout();
    QMainWindow::show();
    l->insertWidget(0, searchTab);
    l->insertWidget(2, chatTab);
    baseX = ui->scrollAreaWidgetContents->x();
    baseY = ui->scrollAreaWidgetContents->y();
    searchTab->move(baseX - searchTab->width(), baseY);
    chatTab->move(baseX + ui->mrte_text->width(), baseY);

移动标签似乎没有任何作用,因为删除 move 行没有任何改变,但我已经探索了这种可能性。

【问题讨论】:

也许这与***.com/questions/18394706/…有关? 我认为这行不通。您链接的线程中的选项卡是 Qt 意义上的实际选项卡,而且我也不想隐藏我的小部件,因为使它们再次可见将调整布局大小以适应滚动区域可见部分中的所有内容,当我真的只想滚动它。 【参考方案1】:

看起来你可以用QSplitter处理一些事情

在不相关的说明中,您不应该使用 show 来进行这种设置。该方法不仅在第一次显示小部件时被调用。

【讨论】:

以上是关于在 QHBoxLayout 中添加屏幕外的小部件以稍后显示的主要内容,如果未能解决你的问题,请参考以下文章

如果未动态添加,如何正确删除Kivy中的小部件

Qt - 无法访问动态创建的 QHBoxLayout 小部件

如何打开启动器的小部件选择器?

QHBoxLayout 间距

标签中的小部件放置

如何在小部件测试中找到屏幕外的 ListView 子项?