Найти - Пользователи
Полная версия: Пример Qt4 с C++ на python 3
Начало » GUI » Пример Qt4 с C++ на python 3
1 2 3
MrViktor
Файл с формой.
Попутно вопрос, почему все стараются рисовать интерфейс в коде?
vic57
MrViktor
Попутно вопрос, почему все стараются рисовать интерфейс в коде?
в принципе разницы нет.
на qt пишу в qtcreator, там и дизайнер и ассистент под рукой.
MrViktor
Всем добрый день!
В общем продолжаю изучать 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
Rodegast
> Файл с формой.

Почему там нет компоновщиков?

> Попутно вопрос, почему все стараются рисовать интерфейс в коде?

Потому что дураков везде хватает.

Ну и вот пример как надо на 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 == .....
PEHDOM
MrViktor
Попутно вопрос, почему все стараются рисовать интерфейс в коде?
Да в принципе особой разницы нету. Комуто удобнее через креатор, комуто через код. Ситуации бывают разные, иногда в креаторе просто невозможно созать нужный интерфейс
Кроме того есть мнение что использование GUI утилит для создания интерфейсов возможно для очень простых программ только. Сложные интерфейсы проще кодировать ручками.
Rodegast
> мнение что …. Сложные интерфейсы проще кодировать ручками.

Это мнение тех кто сложные интерфейсы никогда не создавал.
Shaman
Когда Qt похоронен в недрах более высокоуровневого фреймворка и гуй генерируется на лету, тогда да - в дизайнере особо не разгонишься.
vic57
MrViktor
В общем продолжаю изучать Qt4
примеры из поставки кьюта давно опитонены
https://github.com/Werkov/PyQt4/tree/master/examples
MrViktor
Rodegast
Почему там нет компоновщиков?
Можно поподробней, что за компоновщик? layouts? - если да, то на текущий момент работаю над пониманием функционала, а они вроде нужны только визуального оформления или я не прав?
Rodegast
Ну и вот пример как надо на python-е писать:
Спасибо, стараюсь научится (поправлю). Грубых нарушений в коде не замечено?

PEHDOM
Да в принципе особой разницы нету.
Мне удобней держать открытым дезайнер и тут же код, поначалу начал кодом рисовать, но потом плюнул на это (пол дня интерфейс рисовать не сильно сложный это не по мне)

PEHDOM
иногда в креаторе просто невозможно созать нужный интерфейс
Это да, но можно же использовать так сказать гибридный подход то что нельзя визуально, создаешь в коде. А так да, кто как любит, так и извращается.
MrViktor
vic57
примеры из поставки кьюта давно опитонены
Спасибо, смотрел только от другой версии (от 4 не мог найти), но в них я уж больно сильно погряз не в понимании. А по документации я и к синтаксису привыкаю и пошагово наращивается функционал и понимание приходит.
Да и GUI там кодом создают, не говорю что это плохо, но я в дальнейшем планирую по максимуму пользоваться дизайнером, а в коде делать только то, что нельзя изобразить визуально.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB