Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> PyQt - самодельный виджет: QComboBox+QToolButton 
:(
    Опции темы
kasatsky
  Дата 21.9.2011, 21:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 21.9.2011

Репутация: нет
Всего: нет



Коллеги, помогите, обгуглился - бестолку.
Задача: сделать виджет, состоящий из комобокса и дополнительной кнопки. Виджет должен работать в связке 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)

Визуально получается то, что нужно:
user posted image

Однако, 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, но тогда я не знаю, как добиться потребного внешнего вида :(
Помогите, люди добрые...

Это сообщение отредактировал(а) kasatsky - 21.9.2011, 21:07
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Python: Разработка GUI | Следующая тема »


 




[ Время генерации скрипта: 0.0697 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.