• 6214阅读
  • 7回复

[提问]QT关于拖拽的问题 [复制链接]

上一主题 下一主题
离线ichliebedich
 

只看楼主 倒序阅读 楼主  发表于: 2011-07-26
我在QListWidget中设置图标模式,我想把QListWidget中的QListWidgetItem拖拽出来,在接受的地方显示一个QPushButton按钮,QPushButton的数据是如何传递的?
离线ppdayz

只看该作者 1楼 发表于: 2011-07-26
回 楼主(ichliebedich) 的帖子
有个简单的办法
子类化QListWidget,
重写
virtual void  mouseMoveEvent ( QMouseEvent * event )
virtual void  mousePressEvent ( QMouseEvent * event )
virtual void  dragEnterEvent ( QDragEnterEvent * event )
virtual void  dragMoveEvent ( QDragMoveEvent * event )
virtual void  dropEvent ( QDropEvent * event )

这几个,然后数据从QListWidgetItem的
void  setData ( int role, const QVariant & value ) 设置,
然后从QVariant  data ( int role ) const 中取

一般int role,定义到Qt::userRole后面,自己#define一个
#define youDataRole1 (Qt::userRole + 1)
....

离线ichliebedich

只看该作者 2楼 发表于: 2011-07-27
回 1楼(ppdayz) 的帖子
子类化的QListWidget只负责拖,用重写dropEvent 函数么?
离线ppdayz

只看该作者 3楼 发表于: 2011-07-27
回 2楼(ichliebedich) 的帖子
不重写virtual void  dropEvent ( QDropEvent * event ) 你的QPushButton怎么来?
离线ichliebedich

只看该作者 4楼 发表于: 2011-07-27
回 3楼(ppdayz) 的帖子
在接受QPushButton的Widget里面写啊,我的子类化的QListWidget只负责拖,就像QT里面的那样,子类化的QListWidget不用写吧?

virtual void  mouseMoveEvent ( QMouseEvent * event )
virtual void  mousePressEvent ( QMouseEvent * event )
virtual void  dragEnterEvent ( QDragEnterEvent * event )
virtual void  dragMoveEvent ( QDragMoveEvent * event )
virtual void  dropEvent ( QDropEvent * event )

这5个函数是不是在子类化的QListWidget中只重写mouseMoveEvent ,mousePressEvent 就可以呢?

多谢指教~
离线ppdayz

只看该作者 5楼 发表于: 2011-07-27
其实mousePressEvent和mouseMoveEvent是为了drag做铺垫,
当drop完成的时候是调用dropEvent,
This event handler is called when the drag is dropped on this widget.
你drop成功了之后,才在接受的地方显示一个QPushButton按钮,所以是要写的
mouseMoveEvent是用来做些判断的,也可以不写
离线ichliebedich

只看该作者 6楼 发表于: 2011-08-02
我在strartDrag函数中实现拖拽,在里面new了一个自己定义的类,如果没有地方接受我的拖拽,我这个new的对象应该在哪释放?
离线ppdayz

只看该作者 7楼 发表于: 2011-08-02
回 6楼(ichliebedich) 的帖子
一般不要在开始drag的时候new东西,在drop的时候new,drag的时候只是设置有用的信息
快速回复
限100 字节
 
上一个 下一个