Форум сайта python.su
Файл с формой.
Попутно вопрос, почему все стараются рисовать интерфейс в коде?
Прикреплённый файлы:
ex3.ui (665 байт)
Офлайн
MrViktorв принципе разницы нет.
Попутно вопрос, почему все стараются рисовать интерфейс в коде?
Отредактировано vic57 (Март 14, 2017 15:48:28)
Офлайн
Всем добрый день!
В общем продолжаю изучать Qt4 по вот этой документации и выкладываю исходники “опитоненных” примеров (с небольшими моими дополнениями). Возможно кому-нибудь пригодится для понимания и чтоб более опытные люди указали на мои огрехи.
Это только переопределенный класс (до стадии вставки и удаления строк), над созданием которого идет речь в доке. Тестовый проект с формой в прикрепленном архиве.
class StringListModel(QAbstractListModel): def __init__(self, strings): QAbstractListModel.__init__(self) self._stringList = strings def rowCount(self, parent=None): return len(self._stringList) def data(self, index, role): if not index.isValid(): return None if index.row() >= len(self._stringList): return None if role == Qt.DisplayRole or role == Qt.EditRole: return self._stringList[index.row()] else: return None pass def headerData (self, selection, orentation, role=Qt.DisplayRole): if role != Qt.DisplayRole: return None if orentation == Qt.Horizontal: return 'Column %s'%selection else: return 'Row %s'%selection pass def flags(self, index): if not index.isValid: return Qt.ItemIsEnabled return super(StringListModel, self).flags(index) | Qt.ItemIsEditable def setData(self, index, value, role): if index.isValid and role == Qt.EditRole: self._stringList[index.row()] = value self.dataChanged.emit(index, index) return True return False def insertRows(self, position, rows, parent = QModelIndex()): self.beginInsertRows(QModelIndex(), position, position+rows-1) i = 0 while i < rows: self._stringList.insert(position, '') i += 1 self.endInsertRows() return True def removeRows(self, position, rows, parent = QModelIndex()): self.beginRemoveRows(QModelIndex(), position, position+rows-1) i = 0 while i < rows: del self._stringList[position] i += 1 self.endRemoveRows() return True
Прикреплённый файлы:
test_prim.zip (2,0 KБ)
Офлайн
> Файл с формой.
Почему там нет компоновщиков?
> Попутно вопрос, почему все стараются рисовать интерфейс в коде?
Потому что дураков везде хватает.
Ну и вот пример как надо на python-е писать:
def data(self, index, role): if index.isValid() and index.row() < len(self._stringList): if role == Qt.DisplayRole or role == Qt.EditRole: return self._stringList[index.row()] elif role == .....
Офлайн
MrViktorДа в принципе особой разницы нету. Комуто удобнее через креатор, комуто через код. Ситуации бывают разные, иногда в креаторе просто невозможно созать нужный интерфейс
Попутно вопрос, почему все стараются рисовать интерфейс в коде?
[code python][/code]
Отредактировано PEHDOM (Март 16, 2017 09:54:05)
Офлайн
> мнение что …. Сложные интерфейсы проще кодировать ручками.
Это мнение тех кто сложные интерфейсы никогда не создавал.
Офлайн
Когда Qt похоронен в недрах более высокоуровневого фреймворка и гуй генерируется на лету, тогда да - в дизайнере особо не разгонишься.
Офлайн
MrViktorпримеры из поставки кьюта давно опитонены
В общем продолжаю изучать Qt4
Офлайн
RodegastМожно поподробней, что за компоновщик? layouts? - если да, то на текущий момент работаю над пониманием функционала, а они вроде нужны только визуального оформления или я не прав?
Почему там нет компоновщиков?
RodegastСпасибо, стараюсь научится (поправлю). Грубых нарушений в коде не замечено?
Ну и вот пример как надо на python-е писать:
PEHDOMМне удобней держать открытым дезайнер и тут же код, поначалу начал кодом рисовать, но потом плюнул на это (пол дня интерфейс рисовать не сильно сложный это не по мне)
Да в принципе особой разницы нету.
PEHDOMЭто да, но можно же использовать так сказать гибридный подход то что нельзя визуально, создаешь в коде. А так да, кто как любит, так и извращается.
иногда в креаторе просто невозможно созать нужный интерфейс
Офлайн
vic57Спасибо, смотрел только от другой версии (от 4 не мог найти), но в них я уж больно сильно погряз не в понимании. А по документации я и к синтаксису привыкаю и пошагово наращивается функционал и понимание приходит.
примеры из поставки кьюта давно опитонены
Отредактировано MrViktor (Март 16, 2017 10:34:11)
Офлайн