Qt设置窗口点击别的地方消失

本文介绍如何在Qt中创建一个弹出窗口,当窗口失去焦点时自动隐藏。通过设置窗口属性为Qt::Window并使用事件过滤器监听窗口激活状态变化,实现窗口焦点消失时的自动隐藏功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

参考

https://blog.youkuaiyun.com/Furrain/article/details/101688123

简介

很多时候我们希望创建一个弹出窗口,并且有可能是顶级窗口。这时需要一些操作来让窗口失去焦点时隐藏。

1.设置窗口属性为Qt::window使得窗口出现时强制获取到焦点

在构造函数中添加如下代码

    this->setWindowFlags(Qt::Window|Qt::FramelessWindowHint);
    installEventFilter(this);

2.当活动窗口不是此窗口时(焦点消失时),隐藏窗口

重写事件过滤器

bool subTitleSetWid::eventFilter(QObject *o, QEvent *e)
{

    if (e->type() == QEvent::ActivationChange)
    {
        if(QApplication::activeWindow() != this)
        {
            this->hide();
        }
    }
    return QWidget::eventFilter(o,e);
}

Qt中,如果你想要实现这样的功能,即用户点击按钮后,主窗口隐藏,然后弹出一个新的悬浮窗口显示新按钮,你可以按照以下步骤操作: 1. **创建窗体布局**: 首先,在主窗口设计上,你需要放置一个按钮和其他需要保留的元素。使用`QMainWindow`作为主窗口,并在其中添加一个`QPushButton`。 ```cpp // 主窗口类 class MainWindow : public QMainWindow { // ... private: QPushButton *exitButton; }; ``` 2. **响应按钮点击事件**: 然后,连接按钮的`clicked()`信号到一个槽函数,这个槽函数会处理主窗口隐藏并展示新的悬浮窗口。 ```cpp void MainWindow::on_exitButton_clicked() { this->hide(); // 隐藏主窗口 FloatingWindow *floatingWindow = new FloatingWindow(this); // 创建并显示浮动窗口 } ``` 3. **创建悬浮窗口**: 创建一个新的`QWidget`类或者子类`FloatingWindow`,它将是一个独立于主窗口的小窗口,并包含一个新的按钮。 ```cpp class FloatingWindow : public QWidget { public: FloatingWindow(MainWindow *parent) : QWidget(parent) { // 创建悬浮窗口布局和按钮 QPushButton *floatButton = new QPushButton("悬浮按钮", this); QVBoxLayout *layout = new QVBoxLayout(); layout->addWidget(floatButton); setLayout(layout); } }; ``` 4. **显示悬浮窗口**: `FloatingWindow`的构造函数中,你会看到它接受了一个指向`MainWindow`的指针,这样可以在主窗口关闭时自动销毁浮动窗口。 5. **注意事项**: - 考虑一下生命周期管理,比如浮动窗口是否应该在用户点击其他地方或关闭窗口消失。 - 如果你想让悬浮窗口保持在屏幕顶部,可以使用`setWindowFlags(Qt::WindowStaysOnTopHint)`。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值