QDockwidget悬浮自定义(最小化,最大化),关闭自动停靠

本文介绍了如何在Qt中处理QDockWidget的浮动窗口状态。通过重写event事件函数,当QDockWidget变为浮动时,窗口将自动调整为预设大小并居中显示。同时,在关闭浮动窗口时,窗口会自动返回到原始停靠位置。这个实现涉及到了QEvent::ZOrderChange事件的处理和窗口位置的计算。
摘要由CSDN通过智能技术生成

简介

某些软件需要用到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);
}
在使用Qt框架中的`QDockWidget`时,如果你想实现最小化按钮触发贴边最小化的事件,你需要对`QDockWidget`的行为进行一些自定义。这通常涉及到重写事件处理函数,比如`event()`或者特定的窗口状态函数,以及与`QMainWindow`交互来实现贴边效果。 默认情况下,`QDockWidget`在被最小化时,会变成工具栏的一部分,并显示在主窗口的相应侧边。如果你想要实现的是一个特别的最小化行为,比如只显示标题栏而不缩小到侧边栏,那么你可能需要自定义窗口的行为。 以下是一个简单的代码示例,展示了如何重写`QDockWidget`的事件处理函数来改变最小化时的行为: ```cpp #include <QDockWidget> #include <QMainWindow> #include <QEvent> class CustomDockWidget : public QDockWidget { public: CustomDockWidget(QWidget *parent = nullptr) : QDockWidget(parent) {} protected: bool event(QEvent *event) override { if (event->type() == QEvent::WindowMinMaxChange) { // 检查是否是被最小化的状态 if (isMinimized()) { // 执行贴边最小化的动作 // 这里可以是显示一个自定义的小窗口,或者改变当前窗口的外观等 } } return QDockWidget::event(event); } }; ``` 在这个例子中,我们创建了一个`CustomDockWidget`类,它继承自`QDockWidget`。在重写的`event()`函数中,我们检查了事件类型是否为`QEvent::WindowMinMaxChange`,这是当窗口最小化最大化时触发的事件。如果检测到最小化状态,我们可以在这里添加自定义代码来处理贴边最小化事件。 请注意,这个代码只是一个框架示例,它并没有实现具体的贴边最小化逻辑,因为这取决于你希望如何展示最小化后的dock widget。你可以根据自己的需求来设计和实现这个部分。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值