使Qlistwidget仅显示1个项目
-
29-09-2019 - |
题
我创建了一个继承Qlistwidget的类,本来可以成为一堆卡片。
我已经超载了拖放功能,以允许将卡拖到表上(我程序的另一个对象),现在我偶然发现了另一个问题。
Qlistwidget显示了我所有的项目(主要是因为我从一开始就将它们添加到GUI中)。
因此,它就是这样做的:在我的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
这些是我的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中有我的洗牌卡向量(在其中将所有卡添加到forloop中)。
还是我应该制作一个信号和插槽,以在Mainwindow和CardPile之间连接 - 因此
delete takeItem(row(item));
被称为我发出的信号,说要将下一张卡添加到列表中?
感谢您的反馈
解决方案
您可以使用 QStackWiget
(删除的第一行正是您要刺激的),而不是qlistwidget。
不隶属于 StackOverflow