• 4570阅读
  • 1回复

[提问]QT3 MDI窗口之间不能启动drag 和drop [复制链接]

上一主题 下一主题
离线room502
 

只看楼主 倒序阅读 楼主  发表于: 2011-05-18
我建立了一个QT3的mdi窗口,各个窗口显示不同图形,想将目标窗口的图形,合并到一个窗口显示.想使用drag和drop方式实现,那位i给我说说咋实现呀.
构造函数如下:
MDIWindow::MDIWindow( QWidget* parent, const char* name, int wflags )
    : QWidget( parent, name, wflags )
{
setAcceptDrops(true);
}
//下面没做数据类型过滤,只是考察进入DragEnterEvent否,试验结果是没有激发DragEnterEvent 事件
void MDIWindow::dragEnterEvent (QDragEnterEvent *event)
{
   //if (event->mimeData()->hasText())     //这里视自己的情况可以是hasColor、hasFormat、hasHtml等
   // {
        if (event->source() == this)
        {
            event->acceptAction ( ) ;
            event->accept();
            // TODO:处理内部拖曳
        }
        else
        {
            event->accept();
            //TODO:处理外部的drag,即接受drop
        }
    //}
    //else
    //{
    //    event->ignore();
    //}
}

void MDIWindow::dragLeaveEvent(QDragLeaveEvent *event)
{
    cout <<"drag leave" <<endl;
}
void MDIWindow::dragMoveEvent(QDragMoveEvent *event)
{
     cout <<"drag move" <<endl;
}

void MDIWindow::dropEvent (QDropEvent *event)
{
cout <<"drop" <<endl;

}
void MDIWindow::mousePressEvent (QMouseEvent *event)
{
    cout <<"mouse press" <<endl;
}


上面代码mousePressEvent可 激发,但其他事件没有激发,其大侠帮助看看
离线room502

只看该作者 1楼 发表于: 2011-05-19
已经部分解决:
通过QTextDrag传递数据文件名,然后再在目标窗口上重绘数据,感觉这种实现显示效率有些问题


但我仍然有另一个显示效率问题是:希望直接将实例化QWidget拖拉过去.避免重画带来的显示效率问题.
快速回复
限100 字节
 
上一个 下一个