Можно ли скопировать QCombobox в другой QCombobox - PullRequest
2 голосов
/ 30 августа 2011

Я использую Qt Designer для создания своего макета пользовательского интерфейса. На макете у меня есть выпадающий список cb_fac_cd. В моем коде у меня есть функция, которая автоматически создает комбинированный список на основе списка, который я пытаюсь построить. У меня есть много этих списков, определенных в базе данных, и эта функция выплевывает QComboBox.

К сожалению, до сих пор я использовал эту функцию только для добавления cellWidgets в QTableWidgets. Там прекрасно работает. Теперь я хочу заполнить этот ранее существующий список.

Кажется, что простой self.ui.cb_fac_cd = makeComboBox('FACILITIES') не работает. Я вижу, что функция возвращает QComboBox как обычно, но комбинированный список cb_fac_cd остается незаполненным.

Как мне скопировать или назначить возвращенный комбинированный список одной сборке в Qt Designer?

Я использую PyQt, но это не должно иметь никакого значения.

Ответы [ 3 ]

1 голос
/ 30 августа 2011

Похоже, вы должны либо

  1. Измените makeComboBox на populateComboBox (QComboBox * p) и передайте его в поле со списком для заполнения, или
  2. Создайте и добавьте QComboBox в ваш макет динамически и удалите его из .ui
1 голос
/ 30 августа 2011

Вы можете изменить модель с вашего пользовательского интерфейса на модель, полученную из другого списка:

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

Но для этой части:

У меня есть много этих списков, определенных в базе данных, и эта функция выплевывает QComboBox. К сожалению, до сих пор я использовал эту функцию только для добавления cellWidgets в QTableWidgets.

Если данные поступают из базы данных, вы можете посмотреть QSqlRelationalTableModel , чтобы избежать этого вручную.

1 голос
/ 30 августа 2011

Насколько я знаю, вы не можете заменить объекты, которые являются частью файлов .h, сгенерированных механизмом UIC Qt (хотя я не могу подтвердить, что 100% сейчас).

В таких случаях я обычно делаю пустой макет в файле пользовательского интерфейса, а затем делаю следующее: (Обратите внимание, что я использую синтаксис Qt / C ++, так как я не знаю синтаксис pyqt, но, думаю, вы поймете идею)

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

Кроме того, если это возможно для вашей программы, рассмотрите возможность использования перечисления, а не строки для функции makeComboBox. Обычно это быстрее и безопаснее.

...