【问题标题】:Injecting widgets depending on item selected in drop down根据下拉列表中选择的项目注入小部件
【发布时间】:2016-01-20 14:40:49
【问题描述】:

我想知道如何用我根据所选的 opencv 过滤器预定义的小部件填充空白区域。我查看了 qhide 和 qshow,但是当我在同一个窗口中有超过 12 个不同的过滤器时,混乱就成了一个问题。

有什么建议吗?

http://i.imgur.com/OAHcLz6.png

【问题讨论】:

  • 您的小部件是使用设计器创建的还是使用 c++ 代码创建的?
  • qtcreator 所以我想我默认使用的是 qtdesigner?

标签: qt qt-creator


【解决方案1】:

我认为最好的方法是使用QStackedWidget 类。您可以创建多个带有不同小部件的页面并添加到堆栈中。

stack->addWidget(widget);

然后,当您在组合框中选择一些值时,您可以在堆栈小部件中显示相应的页面。

stack->setCurrentIndex(index);

【讨论】:

  • 现在我只是将按钮拖放到 .ui 文件中,使用 QStackedWidget 我必须自己在 Window.cpp 文件中写出来?
  • 不,您可以根据需要使用设计器创建 mani UI 文件。然后从代码创建小部件并在其上安装此 UI 文件。
  • 我创建了 2 个页面进行测试,如何通过下拉菜单显示它们?我在我的 opencv_Window.cpp 文件中,我有以下 void opencv_Window::on_FilterList_activated(const QString &arg1) { currentFilter = arg1.toStdString(); if(currentFilter == "高斯显着性除法"){ /*这里的代码 */ ;} }
  • 在这种方法中,您只需要在堆栈中选择小部件,就像我在回答中展示的那样。但是在其他一些地方(例如在构造函数中)你应该用你的页面填充堆栈。创建小部件,在其上设置 UI 并将它们添加到堆栈。
  • 只需阅读我的回答中的文档链接即可。这些是例子。
【解决方案2】:

您可以在主窗口的合适位置添加布局,并根据需要添加或删除小部件。

如果您希望它们始终在后台同步事物,您可以在构造函数中创建所有小部件实例。如果不需要,您可以在需要时创建实例并在不需要时删除它们。

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    widget1 = new MyWidget1;
    widget2 = new MyWidget2;
    widget3 = new MyWidget3;

    // myWidgetlayout could be a QHBoxLayout or a QVBoxLayout
    ui->myWidgetlayout->addWidget(widget1);

    .... //Continue with rest of the things
}

每当您想更改小部件时,您可以执行以下操作:

ui->myWidgetlayout->removeWidget(widget1);
ui->myWidgetlayout->addWidget(widget2);

【讨论】:

  • 嗯...我想我跟着你了,我会试试这个并报告。
  • 另外,杂乱的问题似乎一直困扰着我,有没有办法在 qt creator 中以单独的视图查看小部件?如果我有 12 个过滤器,那么将有 12 组不同的小部件,所有这些小部件都堆叠在一起。
  • @Zypps987:我相信你需要的是一个布局。你能告诉我你在说什么小部件吗?
  • 任何输入小部件和显示小部件。 i.imgur.com/iUFpVet.png 这是我现在拥有的截图。 When an item in the top right QComboBox is selected the corresponding qwidgets will be displayed in the area where the current horizo​​ntal trackbars are.
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-07-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-09
  • 1970-01-01
相关资源
最近更新 更多