Qt界面最小化后恢复界面不能显示软件界面 出现假死?

1.本人做的一个项目,测试人员提出一个bug, 引起的思考

做法步骤 新建一个QWidget 设置属性
大小为19201080,电脑环境也是19201080
setWindowFlags(this->windowFlags() | Qt::FramelessWindowHint);
2.添加子控件用于拖动当前界面 widget_MouserArea
3.安装过滤器 ui.widget_MouserArea->installEventFilter(this);
4.编写事件过滤接口
bool MainWidget::eventFilter(QObject * watched, QEvent * event)
{
if (watched == ui.widget_MouserArea)
{
if (event->type() == QEvent::MouseButtonPress)
{
QMouseEvent *e = dynamic_cast<QMouseEvent *>(event);
if (e)
{
m_MovePoints = e->globalPos() - this->pos();
}
}

	if (event->type() == QEvent::MouseMove)
	{
		QMouseEvent *e = dynamic_cast<QMouseEvent *>(event);
		if (e)
		{
			this->move(e->globalPos() - m_MovePoints);
			LOG_FUN_INFO("fun point %d,%d,%d,%d", e->globalPos().x(), e->globalPos().y(), m_MovePoints.x(), m_MovePoints.y());
		}
	}
	return true;
}

return QObject::eventFilter(watched, event);

}

5.自定义最小化按钮接口

void MainWidget::slot_pushButton_MainWidgetMin_clicked(void)
{
this->showMinimized();
}

然后按照如下步骤执行 发现怪异现象
1.启动软件,
2.进入软件主界面后,将软件最小化;
3.在任务栏点击软件图标,将软件最大化;
4.通过鼠标挪动软件位置widget_MouserArea,
5.将软件最小化
6.软件最小化后就不能最大化了。

1.经过排查分析
showevent事件需要实现如下:
void MainWidget::showEvent(QShowEvent* event)
{
showNormal();
}
才可以使点击任务栏后 可以显示软件界面

具体详细原因不明确。有哪位大神知晓告知 谢谢

  • 8
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
如果你使用的是Qt Designer设计界面,那么最小化、最大化和关闭按钮应该会出现窗口标题栏的右侧。如果你在代码中手动设置了窗口的标题栏,那么你需要将最小化、最大化和关闭按钮添加到自定义的标题栏中。你可以使用以下代码添加这些按钮: ```cpp // 最小化按钮 QToolButton *minimizeButton = new QToolButton(this); minimizeButton->setIcon(QIcon(":/icons/minimize.png")); minimizeButton->setToolTip(tr("Minimize")); minimizeButton->setFixedSize(20, 20); connect(minimizeButton, SIGNAL(clicked()), this, SLOT(showMinimized())); // 最大化按钮 QToolButton *maximizeButton = new QToolButton(this); maximizeButton->setIcon(QIcon(":/icons/maximize.png")); maximizeButton->setToolTip(tr("Maximize")); maximizeButton->setFixedSize(20, 20); connect(maximizeButton, SIGNAL(clicked()), this, SLOT(showMaximized())); // 关闭按钮 QToolButton *closeButton = new QToolButton(this); closeButton->setIcon(QIcon(":/icons/close.png")); closeButton->setToolTip(tr("Close")); closeButton->setFixedSize(20, 20); connect(closeButton, SIGNAL(clicked()), this, SLOT(close())); // 将按钮添加到标题栏中 QHBoxLayout *titleLayout = new QHBoxLayout(ui->titleBar); titleLayout->addWidget(minimizeButton); titleLayout->addWidget(maximizeButton); titleLayout->addWidget(closeButton); titleLayout->addStretch(); titleLayout->setContentsMargins(0, 0, 0, 0); ``` 这里的 `ui->titleBar` 是一个自定义标题栏的 QWidget,你需要先在 Qt Designer 中将窗口的标题栏设置为此 QWidget。你还需要将 minimize.png、maximize.png 和 close.png 这三张图片添加到你的项目资源中。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值