自己开发了一个股票智能分析软件,功能很强大,需要的点击下面的链接获取:
https://www.cnblogs.com/bclshuai/p/11380657.html
1.应用场景
在一些临时显示的界面,比如声音的调节面板,设置好声音后,不需要手动按钮来控制隐藏,而是离开界面,或者失去focus之后自动隐藏窗口。如下图所示。
2.实现方法
重写下面两个虚函数,实现离开界面和失去foucs时自动隐藏的功能
void leaveEvent(QEvent *e); //离开QWidget瞬间事件
void focusOutEvent(QFocusEvent *event);//失去focus时自动隐藏
头文件
#ifndef VOICECTRL_H
#define VOICECTRL_H
#include <QDialog>
#include "ui_voicewin.h"
class VoiceCtrl : public QDialog
{
Q_OBJECT
public:
VoiceCtrl();
~VoiceCtrl();
Ui::VoiceCtrl ui;
protected:
void enterEvent(QEvent *e); //进入QWidget瞬间事件
void leaveEvent(QEvent *e); //离开QWidget瞬间事件
void focusOutEvent(QFocusEvent *event);
private:
};
#endif // VOICECTRL_H
源文件
#include "VoiceCtrl.h"
VoiceCtrl::VoiceCtrl()
{
ui.setupUi(this);
setWindowModality(Qt::NonModal);
setWindowFlags(Qt::FramelessWindowHint| Qt::WindowStaysOnTopHint);
//setAttribute(Qt::WA_TranslucentBackground, true);//背景设置透明
this->resize(36, 112);
connect(ui.checkBoxVolume, &QCheckBox::clicked, this, [=]() {
if (ui.checkBoxVolume->isChecked())
{
ui.horizontalSliderSimilarity->setValue(0);
}
else
{
ui.horizontalSliderSimilarity->setValue(50);
}
});
connect(ui.horizontalSliderSimilarity, &QSlider::valueChanged, this, [=]() {
if (ui.horizontalSliderSimilarity->value()==0)
{
ui.checkBoxVolume->setChecked(true);
}
else
{
ui.checkBoxVolume->setChecked(false);
}
});
}
VoiceCtrl::~VoiceCtrl()
{
}
void VoiceCtrl::enterEvent(QEvent *e)
{
show();
}
void VoiceCtrl::leaveEvent(QEvent *e)//离开隐藏closebutton
{
hide();
}
void VoiceCtrl::focusOutEvent(QFocusEvent * event)//失去焦点后自动隐藏
{
//如果是点击界面上的控件,声音控制界面也会失去focus,所以点击界面上的控件时,这里返回不隐藏
if (ui.checkBoxVolume->hasFocus()||ui.horizontalSliderSimilarity->hasFocus())
{
return;
}
hide();
}
在需要使用声音调节面板的地方,创建VoiceCtrl对象,通过点击按钮,来显示声音控制面板到按钮的上方,离开控制面板或失去focus之后自动隐藏。
//显示声音调节界面
{
QPoint point = this->mapToGlobal(ui.PlayWndToolbar_RightWnd->pos());
m_volumeCtrl.move(point.x()-4, point.y() - 110);
m_volumeCtrl.show();
//最关键的一步,一定要将界面对象设置为该属性,否则无法实现点击其他地方,声音界面无focus时自动隐藏。
m_volumeCtrl.setFocus(Qt::ActiveWindowFocusReason);
}
ActiveWindowFocusReason
public static final Qt.FocusReason ActiveWindowFocusReason
The window system made this window either active or inactive.