简介
某些软件需要用到QDockwidget停靠窗口,这时可能就需要有一个需求,在点击QDockWidget的悬浮按钮后让窗口指定一个大小,并且显示在桌面中间,点击关闭悬浮后的关闭按钮后,让悬浮窗口自动停靠到原来位置
点击浮动到屏幕中间并初始化大小
QDickWidget在提升为浮动窗口时,会触发QEvent::ZOrderChange事件,因此只需要重写event事件函数,并处理即可
bool MyDockwidget::event(QEvent* event)
{
if(event->type() == QEvent::ZOrderChange)
{
if(isFloating()) //判断是否变为浮动窗口
{
this->resize(600,400); //改变初始化大小
QDesktopWidget *desk = QApplication::desktop();
this->move((desk->width()-this->width())/2,(desk->height()-this->height())/2);
this->show();
}
}
return QDockWidget::event(event);
}
关闭浮动窗口后自动归位
同理,只需要重写关闭事件函数进行处理
void MyDockWidget::closeEvent(QCloseEvent* event)
{
if(isFloating())
{
this->setFloating(false); //设置浮动标志为false
//创建一个关闭浮动窗口的事件,发送给事件队列
QEvent* e = new QEvent(QEvent::ZOrderChange);
QApplication::sendEvent(this,e);
event->ignore(); //最后忽略事件,不关闭窗口
}
return QDockWidget::closeEvent(event);
}