2
我創建了一個繼承QListWidget的類,它是一堆卡片。Make QListWidget只顯示1個項目
我重載了拖放功能,允許將卡片拖到表格中(我的程序的另一個對象),現在我偶然發現了另一個問題。
QListWidget顯示我所有的項目(主要是因爲我從頭添加它們到GUI)。
所以這是怎麼回事:我的主窗口中的 我初始化了我的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?
}
因爲我現在有在主窗口(這裏我添加的所有卡在for循環)我洗好的牌載體。
或者我應該做的信號和插槽,主窗口和CardPile之間的連接 - 所以當
delete takeItem(row(item));
叫我發,說下一個卡添加到列表中的一個信號?
感謝您的反饋
是的,我曾考慮過這個問題。但在這個小部件中,我使用QListWidgetItem來填充listWidget。我也可以用這些填充QStackedWidget嗎? – TheDudeAbides 2010-12-01 12:09:46