2010-11-30 92 views
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)); 

叫我發,說下一個卡添加到列表中的一個信號?

感謝您的反饋

回答

2

您可以使用QStackWiget(該desription的第一行正是你想要什麼ahieve)而不是QListWidget。

+0

是的,我曾考慮過這個問題。但在這個小部件中,我使用QListWidgetItem來填充listWidget。我也可以用這些填充QStackedWidget嗎? – TheDudeAbides 2010-12-01 12:09:46