Qt学习笔记(五)拖放

拖放

拖放是在一个应用程序内或多个应用程序间传递信息的一种直观的现代操作方式。除了为剪贴板提供支持外,通常它还提供数据移动和复制的功能。在实现的过程中,可以复用拖动代码来实现对剪贴板的支持,之所以能够复用,是因为拖动与剪贴板的功能机理都是以QMimeData类为基础的,而QMimeData是一个可以提供不同格式数据的类。

 使拖动生效

拖动操作包括两个动作:拖动和放下。Qt窗口部件可以作为拖动点、放下点或者同时作为拖动点和放下点。

例如以Qt程序是以QTextEdit作为中央窗口部件,当用户从桌面上或文件资源管理器中拖动一个文本文件并且在这个应用程序上放下时,该应用程序就会将文本文件载入到QTextEdit中:

class MainWindow:public QMainWindow
{
 
    Q_OBJECT
public:
    MainWindow();
protected:
    void dragEnterEvent(QDragEnterEvent* event);
    void dropEvent(QDropEvent * event);
private:
    bool readFile(const QString& fileName);
    QTextEdit * textEdit;
};

在构造函数中,创建了一个QTextEdit并且把它设置为中央窗口部件。默认情况下,QTextEdit可以接受来自其他应用程序文本的拖动,并且如果用户在它上面放下一个文件,它将会把这个文件的名称插入到文本中。

MainWindow::MainWindow()
{
 
    textEdit = new QTextEdit;
    setCentralWidget(textEdit);
    textEdit->setAcceptDrops(false);
    setAcceptDrops(true);
    
    setWindowTitle(tr("Text Editor"));
}
 由于拖放时间是从子窗口部件传递给父窗口部件的,所以通过禁用QTextEdit上的放下操作以及启用父窗口MainWindow上的放下操作,就可以在整个MainWindow窗口中获得放下事件。 

void MainWindow::dragEnterEvent(QDragEnterEvent *event)
{
 
    if (event->mimeData()->hasFormat("text/uri-list"))
        event->acceptProposedAction();
}
 当用户把一个对象拖动到这个窗口部件上时,就会调用dragEnterEvent()。如果对这个事件调用acceptProposedAction()就表明用户可以在这个窗口部件上拖放对象。默认情况下,窗口部件是不接受拖动的。Qt会自动改变光标来向用户说明这个窗口部件是不是有效的放下点。 

MIME类型就是设定某种扩展名

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值