2
我有一個附有QStandardItemModel的QTreeView。我試圖啓用拖放從外部來源。我已經完成了文檔中提到的所有提及拖放和拖放項目視圖,但事情並不正確。當我嘗試將文件拖到樹視圖上時,該圖標上始終有一個X,表示該放置不可用。 (我使用OS X,我不知道這個圖標看起來像是什麼窗口)。我希望能夠放棄某些項目,但直到我瞭解基礎知識,我無法編寫該功能。拖放到QTreeView中的QStandardItemModel不起作用
這裏是我的子類的樹視圖源代碼:
MyTreeView::MyTreeView(QWidget *parent) :
QTreeView(parent)
{
setContextMenuPolicy(Qt::CustomContextMenu);
setAcceptDrops(true);
setDropIndicatorShown(true);
}
void MyTreeView::dragEnterEvent(QDragEnterEvent *event)
{
event->acceptProposedAction();
}
void MyTreeView::dropEvent(QDropEvent *event)
{
qDebug("I am here");
event->acceptProposedAction();
}
這裏是子類的標準產品型號來源:
MyStandardItemModel::MyStandardItemModel(QObject *parent) :
QStandardItemModel(parent)
{
}
Qt::DropActions MyStandardItemModel::supportedDropActions() const
{
return Qt::CopyAction;
}
Qt::ItemFlags MyStandardItemModel::flags(const QModelIndex &index) const
{
Qt::ItemFlags defaultFlags = QStandardItemModel::flags(index);
if (index.isValid())
return Qt::ItemIsDropEnabled | defaultFlags;
else
return defaultFlags;
}
bool MyStandardItemModel::dropMimeData(const QMimeData *data, Qt::DropAction action, int row, int column, const QModelIndex &parent)
{
qDebug("I am in the model");
}
正如我所說的,圖標是告訴我,下降不可用,但如果我放棄它,則會從樹視圖中打印出「我在這裏」文本。但是模型視圖中的文字「我在模型中」從來不會被打印出來。我不確定我需要做什麼才能讓模型識別可用的下拉列表並更改圖標,或者讓dropMimeData函數調用。任何幫助表示讚賞,因爲我一遍又一遍地閱讀了文檔,而且我明顯錯過了一些東西。
你必須在你的MyTreeView :: dropEvent()實現中調用'QTreeView :: dropEvent()'。 –