【问题标题】:Is it possible to copy QCombobox to another QCombobox是否可以将 QCombobox 复制到另一个 QCombobox
【发布时间】:2011-11-06 21:46:49
【问题描述】:

我使用 Qt Designer 来构建我的 UI 布局。在布局上,我有一个名为cb_fac_cd 的组合框。在我的代码中,我有一个函数可以根据我正在尝试构建的列表自动构建一个组合框。我在数据库中定义了很多这样的列表,这个函数吐出一个 QComboBox。

不幸的是,到目前为止,我只使用此函数将 cellWidgets 添加到 QTableWidgets。它在那里完美地工作。现在我想填充这个预先存在的组合框。

看起来很简单 self.ui.cb_fac_cd = makeComboBox('FACILITIES') 不起作用。我可以看到该函数照常返回 QComboBox,但 cb_fac_cd 组合框仍未填充。

如何将返回的组合框复制或分配给 Qt Designer 中的一个构建?

我正在使用 PyQt,但这不应该有任何区别。

【问题讨论】:

  • 更多代码将有助于找到问题。你在哪里将组合框传递给这个函数?组合框在哪里填充?

标签: qt pyqt qt-designer qcombobox


【解决方案1】:

据我所知,您无法替换 Qt 的 UIC 机制生成的 .h 文件中的对象(尽管我现在无法确认 100%)。

在这种情况下,我通常会在 ui 文件中设置一个空布局,然后执行以下操作: (请注意,我使用的是 Qt/C++ 语法,因为我不知道 pyqt 语法,但我想你会明白的)

QComboBox* pNewComboBox = makeComboBox( "FACILITIES" );
ui.pComboBoxLayout->addWidget( pComboBox );

此外,如果您的程序可能,请考虑为您的 makeComboBox 函数使用枚举而不是字符串。这通常更快更安全。

【讨论】:

    【解决方案2】:

    听起来你应该要么

    1. 将 makeComboBox 更改为 populateComboBox(QComboBox *p) 并将其传递给布局中的组合框以进行填充,或者
    2. 动态创建 QComboBox 并将其添加到您的布局中,并将其从您的 .ui 中删除

    【讨论】:

      【解决方案3】:

      您可以将模型从您的 Ui 更改为您从另一个组合框获得的模型:

      tempCombo = makeComboBox( "FACILITIES" )
      self.ui.cb_fac_cd.setModel(tempCombo.model())
      

      但是对于那部分:

      我在数据库和这个函数中定义了很多这样的列表 吐出一个 QComboBox。不幸的是,直到现在我只使用这个函数来添加 cellWidgets 到 QTableWidgets。

      如果数据来自数据库,您可能需要查看 QSqlRelationalTableModel 以避免手动操作。

      【讨论】:

        猜你喜欢
        • 2021-10-04
        • 2019-04-14
        • 2021-08-19
        • 2021-04-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-04-26
        相关资源
        最近更新 更多