gay*_*mer 11 qt drag-and-drop qlistwidget
我有两个QListWidget(list1和list2)
list1
应该能够从中接收物品 list2
list1
应该能够通过内部拖放重新组织list2
应该能够从中接收物品 list1
list1->setSelectionMode(QAbstractItemView::SingleSelection);
list1->setDragEnabled(true);
list1->setDragDropMode(QAbstractItemView::DragDrop);
list1->viewport()->setAcceptDrops(true);
list1->setDropIndicatorShown(true);
ulist2->setSelectionMode(QAbstractItemView::SingleSelection);
list2->setDragEnabled(true);
list2->setDragDropMode(QAbstractItemView::InternalMove);
list2->viewport()->setAcceptDrops(true);
list2->setDropIndicatorShown(true);
Run Code Online (Sandbox Code Playgroud)
我不得不把它list2
打开,InternalMove
否则当我把它拖到它时,项目不会删除list1
.
如果我把list1
给InternalMove
我不能删除任何更多的就可以了.
我是否必须编写自己的拖放功能才能执行此操作?
Pio*_*ost 12
您可以扩展QListWidget
覆盖dragMoveEvent
方法,如下所示
#ifndef MYLISTWIDGET_HPP
#define MYLISTWIDGET_HPP
#include <QListWidget>
class MyListWidget : public QListWidget {
public:
MyListWidget(QWidget * parent) :
QListWidget(parent) {}
protected:
void dragMoveEvent(QDragMoveEvent *e) {
if (e->source() != this) {
e->accept();
} else {
e->ignore();
}
}
};
#endif // MYLISTWIDGET_HPP
Run Code Online (Sandbox Code Playgroud)
在我们的实现中,我们检查了拖动事件的来源,我们不接受(允许)丢弃来自我们的小部件本身的项目.
如果您正在使用QtDesigner,则可以在右键单击表单上时使用上下文菜单中的" 提升为..."选项QListWidget
.您必须输入新类的名称(MyListWidget
在我的示例中),您必须输入新头文件的名称,您的类将被声明(您可以将上面的代码复制并粘贴到此文件中).
归档时间: |
|
查看次数: |
9584 次 |
最近记录: |