Сделать QlistWidget только показать 1 элемент
-
29-09-2019 - |
Вопрос
Я создал класс, который наследует Qlistwidget и предназначен для того, чтобы быть стопкой карт.
Я перегрузил функции перетаскивания, чтобы позволить карте перетаскиваться в таблицу (другой объект моей программы), и теперь я наткнулся на другую проблему.
Qlistwidget показывает все мои элементы (в основном потому, что я добавляю их в графический интерфейс с самого начала).
Так вот как это происходит: в моем Mainwindow я инициализирую свой карт -картинок и заполняю его перетасованным вектором карт.
Теперь я хочу, чтобы мой 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
Это функции в моем картоне: 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 (где я добавляю все карты в Forloop).
Или я должен сделать сигнал и слот, соединяемый между MainWindow и CardPile, поэтому, когда
delete takeItem(row(item));
называется я излучаю сигнал, который говорит, чтобы добавить следующую карту в список?
Спасибо за отзыв
Решение
Вы можете использовать QStackWiget
(Первая строка Desription - это именно то, что вы хотите, чтобы его выпить) вместо Qlistwidget.