2015-06-26 2 views
0

Я делаю карточную игру, в которой есть 4 слота карт вместимостью по 5 штук. Я использую ListView для представления каждого слота. Позвольте мне сначала объяснить код, а затем мою проблему.Update ListView from another

class ClientCard : public QObject 
{ 
    Q_OBJECT 
    int code;  // card code 
    int location; // zone in which card is located 
    ... 
    ClientCard* equipTarget; 
    QSet<ClientCard*> equipped; 
    ... 
}; 

class ClientCardModel : public QAbstractListModel 
{ 
    enum CardRoles { 
     CodeRole = Qt::UserRole + 1, 
     LocationRole 
     } 
    ... 
    QList<ClientCard*> m_list; 
}; 

ClientCardModel имеет список ClientCard для ListView и ролей для передачи кода и другого члена в QML. Позвольте мне представить каждый ListView с зоной (например, zone1, zone2 и т. Д.). В игре карта может быть оборудована другими картами в других зонах. Карты, хранящиеся на карте, хранятся в QSet<> equipped, а карта, в которой установлена ​​карта, хранится в equipTarget. При наведении на карту в зоне карты карты, оснащенные ею в других зонах, должны быть подсвечены с использованием изображения, пока мышь не останется на карте.

Любая идея оценивается.

+0

Я не дома, здесь нет ноутбука, не могу представить пример прямо сейчас. Если вы можете подождать 24 часа, я вернусь, иначе сообщите мне, что не ясно, и я отвечу. – skypjack

+0

Код будет полезен. –

+0

Абсолютно, занят на работе, может быть, у меня будет шанс завтра, извините. – skypjack

ответ

0

Дайте мне знать, если это будет соответствовать вашим требованиям.

Ответ просмотрен, просто проснулся, извините. :-)

У вас могут быть делегаты в вашем представлении, покрытые MouseArea. После того, как карта зависает, вы можете установить внутренний параметр, доступный из delegate, который отражает состояние оборудованной карты (зависание/не зависание). Делегат сам будет реагировать на изменение этого параметра, так что каждая другая карта, оснащенная зависанием, тоже будет реагировать.

В других термах, зависание должно изменить какой-либо экспортированный параметр (это может быть достигнуто, возможно, с помощью MouseArea), и делегаты должны быть сконструированы так, чтобы они реагировали на изменения этого параметра, чтобы показать все, что вы хотите.

+0

Первая проблема заключается в том, как передать 'ClientCard * equipTarget' и' QSet оборудованные' в qml, чтобы qml мог знать, какую карту нужно оборудовать. –

+0

Экспортировать свойства не так сложно, здесь документация: http://doc.qt.io/qt-5/qtqml-cppintegration-exposecppattributes.html. Оборудованный комплект не нужно экспортировать, не так ли? Я понял, что вам было интересно разоблачить свойство equipTarget, чтобы узнать, когда он завис. – skypjack

+0

На самом деле есть три 'QSet', все из которых должны быть экспортированы. Да, экспортировать 'equipTarget' не сложно. –