Как стать автором
Обновить

Комментарии 22

А не проще сделать ещё один контейнер с, например, абсолютным расположением и положить туда QGraphicsScene и обычную кнопку?
Действительно непонятно зачем делать свой отдельный класс для контрола, который выглядит как обычная кнопка, если есть метод, который позволяет добавить виджет на сцену:
qt-project.org/doc/qt-4.8/qgraphicsscene.html#addWidget
И тогда получается одна строчка: scene.addItem(QtGui.QPushButton(«hi»))
Ну, или как-то так, в Python не силён.

Или я совсем не понял целей автора.
* scene.addWidget(QtGui.QPushButton(«hi»))
Например, кнопку можно «нарисовать» в виде сложной геометрической фигуры:
Например, такой формы:
1) Для большинства нормальных кнопок хватает QPushButton::setStyleSheet()
2) Для совсем странной формы — может быть проще сделать наследование (хотя я всё равно бы наследовал от QPushButton, дабы можно было добавить не обязательно на сцену). Но тогда вопрос, почему это не раскрыто? Самое интересное было бы как раз разобрать «когда» и «что» рисовать.
Здесь цель, скорее, показать, как рисуется кнопка, не более того.
Следуя этой логике, можно нарисовать какой угодно контрол, который отсутствует в коробке.
Ах, да, вот какой формы я имел в виду: www.wikinoticia.com/images/monkeyzen/monkeyzen.com.wp-content.uploads.2009.02.sandwich-sponge.jpg
proxyWidget'ы вообще чаще всего как костыль выглядят.
Так Вы только за стандартные контролы и виджеты или спользование qml?
А как же творчество и гибкость реализации?
Нарисовать стандартные контролы можно через QStyle вообще-то или даже напрямую через нативное API для системы а потом обернуть в qml, QtComponents Desktop так и сделаны.
На примере стандартного контрола можно сделать и свой нестандартный.
Не проще все на qml сделать?
Разумеется, проще — для тех, кто с ним знаком. Причём, учитывая гибкость при использовании qml — можно сделать лучше.
Какова цель всего этого? Чем не подходит такой вариант?
Бывает, что не хочется быть сторонником утверждения, что «есть несколько способов сделать что-то, но только один из них правильный». Гибкость в реализации той или иной задачи — это выбор, который хочется иметь.
Вопрос номер два, не проще ли с ним познакомится, чем заниматься странной хренью?
Не будьте так категоричны, ведь не все свежие и недавние «технологии» нужно срочно начинать использовать. QML ещё и трёх лет нет, да сорс я привёл на Python — о нём и речь. Кто-то может найти для себя в этом пользу, особенно, когда срочно необходимо найти пример реализации и воспользоваться им.
Считаю это логичным.
Добавить обычную кнопку в QGGraphicsScene — это одна строчка.
А PyQt шевелится что ли еще? Я уж думал все на PySide перебрались, особенно учитывая недавнюю новость о его включении в Qt Project.
Ничего не мешает в этом коде изменить одну строчку. Хотя, не исключены некоторые коллизии из-за различий между PySide и PyQt.
Ну и в PySide можно точно так:

import sys

from PySide.QtGui import QApplication, QGraphicsScene, QGraphicsView, QPushButton

app = QApplication( sys.argv )

scene = QGraphicsScene()
view = QGraphicsView( scene )

someButton = QPushButton( "button" )
scene.addWidget( someButton )

someButton.clicked.connect( view.close )

view.show()

sys.exit( app.exec_() )


PS PyQt ещё нормально шевелится)
QGraphicsScene ведь позволяет рисовать объекты разной формы, не только ректанглы, да полигоны, да и контролы и виджеты не ограничиваются одними только кнопками, поэтому QGraphicsScene является отличным полем для применения интерактивности в приложении.
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории