是否可以将QCombobox复制到另一个QCombobox

时间:2011-08-30 15:09:52

标签: qt pyqt qt-designer qcombobox

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

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

似乎很简单 self.ui.cb_fac_cd = makeComboBox('FACILITIES')不起作用。我可以看到该函数像往常一样返回QComboBox,但cb_fac_cd组合框仍然没有填充。

如何将返回的组合框复制或分配到Qt Designer中的一个版本?

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

3 个答案:

答案 0 :(得分:1)

据我所知,你无法替换属于Qt UIC机制生成的.h文件的对象(虽然我现在无法100%确认)。

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

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

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

答案 1 :(得分:1)

听起来你应该

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

答案 2 :(得分:1)

您可以将模型从Ui更改为从其他组合框获得的模型:

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

但对于那部分:

  

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

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