2

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

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

似乎一个简单的 self.ui.cb_fac_cd = makeComboBox('FACILITIES')行不通。我可以看到该函数照常返回 QComboBox,但 cb_fac_cd 组合框仍未填充。

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

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

4

3 回答 3

1

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

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

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

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

于 2011-08-30T15:32:47.367 回答
1

听起来你应该要么

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

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

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

但对于那部分:

我在数据库中定义了很多这样的列表,这个函数吐出一个 QComboBox。不幸的是,到目前为止,我只使用此函数将 cellWidgets 添加到 QTableWidgets。

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

于 2011-08-30T16:06:16.210 回答