Уведомления

Группа в Telegram: @pythonsu
  • Начало
  • » GUI
  • » PyQt - самодельный виджет: QComboBox+QToolButton [RSS Feed]

#1 Сен. 21, 2011 18:06:48

kaa
От:
Зарегистрирован: 2009-01-11
Сообщения: 11
Репутация: +  0  -
Профиль   Отправить e-mail  

PyQt - самодельный виджет: QComboBox+QToolButton

Коллеги, помогите, обгуглился - бестолку.
Задача: сделать виджет, состоящий из комобокса и дополнительной кнопки. Виджет должен работать в связке QDataWidgetMapper+QSqlRelationalDelegate полностью аналогично QComboBox (не считая дополнительной функциональности кнопки).

Многочисленные маны предлагают очевидный вариант:

class EllipsisComboBox(QWidget):

def __init__(self, parent = None):
QWidget.__init__(self, parent)
self.horizontalLayout = QHBoxLayout(self)
self.horizontalLayout.setSpacing(0)
self.horizontalLayout.setMargin(0)
self.horizontalLayout.setObjectName(u'horizontalLayout')
self.cbCombo = QComboBox(self)
self.cbCombo.setObjectName(u'cbCombo')
self.horizontalLayout.addWidget(self)
self.tbEllipsis = QToolButton(self)
self.tbEllipsis.setObjectName(u'tbEllipsis')
self.tbEllipsis.setText(u'...')
self.horizontalLayout.addWidget(self.tbEllipsis)
Визуально получается то, что нужно:


Однако, QSqlQSqlRelationalDelegate при установке данных пытается явно преобразовать виджет к QComboBox:
void setEditorData(QWidget *editor, const QModelIndex &index) const
{
const QSqlRelationalTableModel *sqlModel = qobject_cast<const QSqlRelationalTableModel *>(index.model());
QComboBox *combo = qobject_cast<QComboBox *>(editor);
if (!sqlModel || !combo) {
QItemDelegate::setEditorData(editor, index);
return;
}
combo->setCurrentIndex(combo->findText(sqlModel->data(index).toString()));
}
и, если не получилось, использует QItemDelegate.
Сдается мне, что очевидный вариант не прокатит, ну не сможет QWidget преобразоваться к комбобоксу.

По хорошему, надо бы наследоваться от QComboBox, но тогда я не знаю, как добиться потребного внешнего вида :(
Помогите, люди добрые…



Офлайн

  • Начало
  • » GUI
  • » PyQt - самодельный виджет: QComboBox+QToolButton[RSS Feed]

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version