QT鼠标键盘相关

本文详细介绍了QT框架中的鼠标拖放功能,包括拖动、放下、剪贴板操作,以及如何添加新的拖放类型。同时,讨论了键盘焦点的处理,包括Tab键、鼠标点击、键盘快捷键、鼠标滚轮等焦点移动方式,阐述了不同平台上的焦点处理策略。
摘要由CSDN通过智能技术生成

QT鼠标键盘

一、鼠标拖放

拖放提供了一种用户在应用程序之间或之内传递信息的一种简单可视机制。拖放在功能上类似剪贴板的剪切和粘贴机制。拖放机制包括拖动、放下、剪贴板、拖放操作、添加新的拖放类型、高级拖放以及和其它应用程序之间的操作几个方面。下面从这几个方面分别进行说明:

1)拖动

开始一个拖动,比如是在鼠标移动事件,创建一个适合你的媒体的QDragObject的子类的对象,例如:对于文本使用QTextDrag,对于图片使用QImageDrag。然后调用drag()方法。例如,从一个窗口部件中开始拖动一些文本:

void MyWidget::startDrag()

  {

    QDragObject *d = new QTextDrag( myHighlightedText(), this );

    d->dragCopy();//拷贝选中文本

    // 不要删除d

  }

在拖动之后,QDragObject没有被删除。在拖放明显完成后,这个QDragObject需要被保存。因为它还可能需要与其它进程通信。最后Qt会删除这个对象。如果拥有拖动对象的窗口部件在删除拖动对象之前被删除,那么任何没有完成的放下操作将会被取消,并且拖动对象会被删除。

2)放下

为了能在一个窗口部件中接收被放下的媒体,这个窗口部件调用setAcceptDrops(TRUE)(如:在它的构造函数中),并且重载事件处理方法dragEnterEvent()dropEvent()。对于更复杂的应用程序,重载dragMoveEvent()dragLeaveEvent()也是必需的。

例如,当拖动后放下文本或图片时,窗口部件接受并处理放下操作的代码如下:

MyWidget::MyWidget(...) :

    QWidget(...)

  {

    ...

    setAcceptDrops(TRUE); //接收被放下的媒体。

  }

//当一个拖动正在进行并且鼠标进入这个窗口部件,这个事件处理函数被调用。

  void MyWidget::dragEnterEvent(QDragEnterEvent* event)

  {

    event->accept( QTextDrag::canDecode(event) ||

        QImageDrag::canDecode(event)  );

  }

//当拖动在这个窗口部件上被放下,这个事件处理器被调用。

  void MyWidget::dropEvent(QDropEvent* event)

  {

    QImage image;

    QString text;

 

    if ( QImageDrag::decode(event, image) ) {//解码图片

      insertImageAt(image, event->pos());//在窗口部件中插入图片

    } else if ( QTextDrag::decode(event, text) ) {

      insertTextAt(text, event->pos());

    }

  }

3)剪贴板

QDragObjectQDragEnterEventQDragMoveEventQDropEvent类都是QMimeSource(提供类型信息的类)的子类。如果你在QDragObject中基于你的数据进行传递,你不仅可使用拖放,而且还可以使用传统的剪切和粘贴。   QClipboard有两个函数:

setData(QMimeSource*)

QMimeSource* data()const

使用这些函数,可以把拖放初始信息放到剪贴板中:

void MyWidget::copy()

{

    QApplication::clipboard()->setData( new QTe

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值