Я создал класс, который наследует QListWidget и должен быть стеком карт.
Я перегрузил функции перетаскивания, чтобы можно было перетаскивать карту на стол (еще один объект моей программы), и теперь я сталкиваюсь с другой проблемой.
QListWidget показывает все мои элементы (в основном потому, что я добавляю их в графический интерфейс с самого начала).
Так вот как это происходит:
в моем главном окне я инициализирую свой объект CardPile и заполняю его перемешанным вектором карточек.
Теперь я хочу, чтобы мой QListWidget показывал только один (но он показывает сетку со всеми моими картами).
По капле я удаляю элемент из моего QListWidget. Но я понятия не имею, нужно ли мне добавлять и удалять по 1 карте за раз (поэтому в моем коде отображается только 1 карта).
public:
TileStack(QWidget *parent = 0);
void addCard(QPixmap pixmap, QPoint location);
QPixmap showCard();
protected:
void dragEnterEvent(QDragEnterEvent *event);
void dragMoveEvent(QDragMoveEvent *event);
void startDrag(Qt::DropActions supportedActions); //in this function I remove the current item
Это функции в моем CardPile: QListWidget.
так:
void TileStack::startDrag(Qt::DropActions /*supportedActions*/)
{
QListWidgetItem *item = currentItem();
QByteArray itemData;
QDataStream dataStream(&itemData, QIODevice::WriteOnly);
QPixmap pixmap = qVariantValue<QPixmap>(item->data(Qt::UserRole));
QPoint location = item->data(Qt::UserRole+1).toPoint();
dataStream << pixmap << location;
QMimeData *mimeData = new QMimeData;
mimeData->setData("card", itemData);
QDrag *drag = new QDrag(this);
drag->setMimeData(mimeData);
drag->setHotSpot(QPoint(pixmap.width()/2, pixmap.height()/2));
drag->setPixmap(pixmap);
if (drag->exec(Qt::MoveAction) == Qt::MoveAction)
delete takeItem(row(item));
//should I also make the add to the next item here? and how exactly should I put it here?
}
Потому что у меня в настоящее время мой вектор перемешанных карт в главном окне (где я добавляю все карты в цикле).
Или я должен сделать сигнал и слот, которые соединяются между mainwindow и CardPile - так, когда
delete takeItem(row(item));
вызывается ли сигнал, который говорит добавить следующую карту в список?
Спасибо за отзыв