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

发布于 2024-12-02 03:43:32 字数 428 浏览 3 评论 0原文

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

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

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

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

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

I use Qt Designer to build my UI layout. On the layout, I have a combobox named cb_fac_cd. In my code I have a function that will automatically build a combobox based on the list I'm attempting to build. I have a lot of these lists defined in the database and this function spits out a QComboBox.

Unfortunately, until now I've only used this function to add cellWidgets to QTableWidgets. It works perfectly there. Now I want to populate this preexisting combobox.

It seems that a simple
self.ui.cb_fac_cd = makeComboBox('FACILITIES') doesn't work. I can see that the function returns the QComboBox as usual, but the cb_fac_cd combobox remains unpopulated.

How can I copy or assign the returned combobox to the one build in Qt Designer?

I am using PyQt, but that shouldn't make any difference.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

左耳近心 2024-12-09 03:43:32

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

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

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

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

As far as I know, you cannot replace objects which are part of the .h files generated by Qt's UIC mechanism (though I cannot confirm that 100% right now).

What I usually do in such cases is to have an empty layout in the ui file and then do the following:
(Note that I'm using Qt/C++ syntax as I don't know the pyqt syntax but I think you will get the idea)

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

Additionally, if possible for your program, consider using an enumeration rather than a string for your makeComboBox function. This is usually faster and safer.

蒲公英的约定 2024-12-09 03:43:32

听起来您应该

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

It sounds like you should either

  1. Change makeComboBox to populateComboBox(QComboBox *p) and pass it the combobox in your layout to fill, or
  2. Create and add the QComboBox to your layout dynamically and remove it from your .ui
独留℉清风醉 2024-12-09 03:43:32

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

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

但是对于该部分:

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

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

You can change the model from you Ui to the one you get from the other combobox:

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

But for that part:

I have a lot of these lists defined in the database and this function
spits out a QComboBox. Unfortunately, until now I've only used this function to add
cellWidgets to QTableWidgets.

If the data comes from a database, you might want to look at QSqlRelationalTableModel to avoid doing that manually.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文