Qt事件处理

来源:互联网 发布:潇湘馆的竹叶 知乎 编辑:程序博客网 时间:2024/06/01 20:40

QEvent 的关键成员函数


void  ignore(); 接受者忽略当前事件,事件可能传递给父组件(希望其它对象接着处理当前事件)

void accept(); 接受者期望处理当前事件(不希望其它对象处理当前事件)

bool isAccept(); 判断当前事件是否被处理


事件过滤器

QObject obj.installEventFilter(QObject*);//安装事件过滤器bool Widget::eventFilter(QObject* obj, QEvent* e){bool ret = true;if( /*根据obj判断对象*/ ){if( /*根据 e->type() 判断事件*/ ){/*事件处理*/}else{ret = QWidget::eventFilter(obj, e);//事件返回给父对象}}return  ret;}

举例:

拖放事件

setAcceptDrops(true);//设置Widget对象接受拖放//重写拖入函数void dragEnterEvent(dragEnterEvent* e){if( /*通过e->mimeData()判断是否有期望数据*/ ){e->acceptProposedAction();}else{    e->ignore();}}//重写放函数void dropEvent(dropEvent* e){    if( /*通过e->mimeData()判断是否有期望数据*/ )    {        //操作数据    }    else    {        e->ignore();    }}


自定义事件的发送:

QApplication::sendEvent(QObject* receiver, QEvent* e);阻塞式

QApplication::postEvent(QObject* receiver, QEvent* e);非阻塞式,事件必须为堆事件,处理完后被Qt释放


自定义事件类:

继承自QEvent且Type值唯一(使用QEvent::User后的值)

class StringEvent:public QEvent

{

public:

static const Type TYPE = static_cast<Type>(QEvent::User + 0XFF);

}

处理事件类对象:

1.将时间过滤器安装到目标对象

在eventFilter()函数中编写自定义事件处理函数

2.在目标对象的类中重写事件处理函数

在event()函数中编写事件处理函数





0 0
原创粉丝点击