QGraphicsItem focus
От: Senyai Россия http://www.arseniy.net
Дата: 20.02.22 18:28
Оценка:
Никак не могу понять как програмно поставить фокус у QGraphicsItem. Что я только не пробовал. Т.е. даже так, фокус судя по коду ставится, т.к. focusItem() меняется, но графически ничего не меняется.

from PyQt5 import QtCore, QtWidgets, QtGui
Qt = QtCore.Qt


app = QtWidgets.QApplication([])

scene = QtWidgets.QGraphicsScene()
scene.setSceneRect(0.0, 0.0, 30.0, 30.0)
view = QtWidgets.QGraphicsView(scene)
view.show()
view.setBackgroundBrush(QtGui.QBrush(Qt.black))
view.setCacheMode(view.CacheBackground)

rect1 = scene.addRect(0,0,10,10)
rect1.setBrush(QtGui.QColor(255, 0, 255))
rect1.setFlags(rect1.ItemIsMovable | rect1.ItemIsSelectable | rect1.ItemIsFocusable)
print("?", rect1.isEnabled())

rect2 = scene.addRect(10,10,10,10)
rect2.setBrush(QtGui.QColor(255, 255, 0))
rect2.setFlags(rect2.ItemIsMovable | rect2.ItemIsSelectable | rect2.ItemIsFocusable)

rect3 = scene.addRect(20,20,10,10)
rect3.setBrush(QtGui.QColor(0, 255, 255))
rect3.setFlags(rect3.ItemIsMovable | rect3.ItemIsSelectable | rect3.ItemIsFocusable)
rect2.setFocus()

def f():
    scene.setFocusItem(rect1, Qt.TabFocusReason)
QtCore.QTimer.singleShot(500, f)
scene.setFocusItem(rect3, Qt.TabFocusReason)

exit(app.exec())
Не бойтесь совершенства. Вам его не достичь. © Сальвадор Дали
Re: QGraphicsItem focus
От: SaZ  
Дата: 23.02.22 13:17
Оценка:
Здравствуйте, Senyai, Вы писали:

S>Никак не могу понять как програмно поставить фокус у QGraphicsItem. Что я только не пробовал. Т.е. даже так, фокус судя по коду ставится, т.к. focusItem() меняется, но графически ничего не меняется.


S>...


Сто лет не работал со сценами и у нас везде была кастомная прорисовка. Вы уверены что rect должен сам рисовать какое-то выделение?
Re[2]: QGraphicsItem focus
От: Senyai Россия http://www.arseniy.net
Дата: 23.02.22 13:43
Оценка:
Здравствуйте, SaZ, Вы писали:

SaZ>Здравствуйте, Senyai, Вы писали:


SaZ>Сто лет не работал со сценами и у нас везде была кастомная прорисовка. Вы уверены что rect должен сам рисовать какое-то выделение?

Мышкой кликаю — рисует. И код посмотрел, QGraphicsScene::mousePressEvent делает setFocusItem и я делаю setFocusItem. В чём же разница не пойму.
Не бойтесь совершенства. Вам его не достичь. © Сальвадор Дали
Re[3]: QGraphicsItem focus
От: Igore Россия  
Дата: 25.02.22 07:00
Оценка: +1
Здравствуйте, Senyai, Вы писали:

SaZ>>Сто лет не работал со сценами и у нас везде была кастомная прорисовка. Вы уверены что rect должен сам рисовать какое-то выделение?

S>Мышкой кликаю — рисует. И код посмотрел, QGraphicsScene::mousePressEvent делает setFocusItem и я делаю setFocusItem. В чём же разница не пойму.
Кликни мышкой и посмотри QGraphicsScene.focusItem может не Rect рисует?
Re[4]: QGraphicsItem focus
От: Senyai Россия http://www.arseniy.net
Дата: 31.08.22 19:15
Оценка: 2 (1) -1
Здравствуйте, Igore, Вы писали:

SaZ>>>Сто лет не работал со сценами и у нас везде была кастомная прорисовка. Вы уверены что rect должен сам рисовать какое-то выделение?

S>>Мышкой кликаю — рисует. И код посмотрел, QGraphicsScene::mousePressEvent делает setFocusItem и я делаю setFocusItem. В чём же разница не пойму.
I>Кликни мышкой и посмотри QGraphicsScene.focusItem может не Rect рисует?

Всё было просто: рисует-то не setFocus(), а setSelected(true).
Не бойтесь совершенства. Вам его не достичь. © Сальвадор Дали
Re[5]: QGraphicsItem focus
От: SaZ  
Дата: 01.09.22 13:09
Оценка:
Здравствуйте, Senyai, Вы писали:

S>...

S>Всё было просто: рисует-то не setFocus(), а setSelected(true).

Немного оффтоп, но всё-таки. Спасибо за то что отписались о решении! Тем более через такое время. Мало кто так делает и часто получается, что поиск по форуму находит только вопросы, но не ответы.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.