发送一个事件
- Qt提供了发送一个事件的功能,由QCoreApplication类的sendEvent()函数或者postEvent()函数来实现。
- sendEvent()会立即处理给定的事件
- postEvent()则会将事件放到等待调度对列中,当下一次Qt的主要事件循环运行时才会处理他。
- sendEvent()中的QEvent对象参数在事件发送完成后无法自动删除,需要在栈上创建QEvent对象。
- postevent()中的QEvent对象参数必须在堆上创建,当事件被发送后事件队列会自动删除!
简单讲就是前者是阻塞的,后者是异步的!
来点实战:
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
// 为子部件安装事件过滤器(其实就是允许父窗口监视自己)
ui->textEdit->installEventFilter(this);
ui->spinBox->installEventFilter(this);
// 使用 QApplication 对象给 spinBox 对象发送一个键盘按下的事件
QKeyEvent keyEvent(QEvent::KeyPress, Qt::Key_M,Qt::NoModifier);
qApp->sendEvent(ui->spinBox,&keyEvent);
}
使用 QApplication 对象给 spinBox 对象发送一个键盘按下的事件
程序刚启动 spinBox 的值就变为了 99 ,说明事件发送成功!
参考:
如是不二:https://fishc.com.cn/forum.php?mod=viewthread&tid=77555&ctid=447