public QGraphicsItem, и стоит задача получать указатель на объект этого класса через вызов QGraphicsItem.
Я подумал, что очень удобно будет хранить указатель на себя же, в объекте Socket, в методе data(), как я и имя класса храню.
Пример в Конструкторе:
Socket::Socket(QGraphicsItem* parent, uint64_t id_, const Position pos)
{
// Set class name
setData(0, "Socket");
Но проблема в том, что QVariant не кушает указатели, либо я делаю что-то не то...
Можете подсказать, что делать в такой ситуации?
Так ты можешь получить указатель на свой кастомный объект через каст qgraphicsitem_cast
У меня дальше в коде происходит такая вещь QGraphicsItem* obj = itemAt(position); И потом где-нибудь в обработчике нажатий, я хочу нажать, мышкой, например, и получить указатель на объект. Как-то так: obj->data(1); Предположи по единице хранятся этот самый указатель. А что делать с qgraphicsitem_cast я, честно говоря, не очень понимаю...
Можно проверить тип или пользовательские данные, поймёшь что это тот самый нужный класс и кастуешь его в кастомный. Если надо хранить прям указатель в qvariant, могу завтра подсказать как. Если не забуду
Окей, покопаю в сторону того, что вы посоветовали, спасибо!
Вон пример тут есть как из qgraphicsitem кастовать в кастомный buttonitem https://doc.qt.io/qt-5/qgraphicsitem.html#data Там правда сразу указатель проверяется в if, но ты можешь сохранить в переменную своего класса. Если все удачно, указатель будет ненулевым Почитай про эту функцию https://doc.qt.io/qt-5/qgraphicsitem.html#qgraphicsitem_cast
Вот это самая уродливая система, которая нарушает принцип Лисковой.
Обсуждают сегодня