qt对话框失去焦点透明

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了qt对话框失去焦点透明相关的知识,希望对你有一定的参考价值。

Qt对话框失去焦点透明是指当你将鼠标移开Qt对话框时,它会变得透明。要让Qt对话框保持不透明,可以在Qt对话框的样式表中添加以下代码:

QDialog
background-color: rgba(255, 255, 255, 1);
opacity: 1;


这样,即使鼠标移开Qt对话框,它也不会变得透明。
参考技术A 真透明需要窗口管理器开启混成,否则透明区域将显示为黑色,这时候可以用非矩形来抠去黑色区域。

背景模糊
kde 扩展 Plasma::WindowEffects::enableBlurBehind(winId(), true, /*这里有个参数指定模糊区域*/)
背景模糊需要窗口管理器开启模糊特效,否则无效。kde kwin 的扩展标识,其它桌面上可能没有模糊效果。
参考技术B Qt框架提供了一个叫设置窗口透明度的功能,可以让用户配置对话框失去焦点时的透明度。只要在对话框中调用setWindowOpacity()函数即可设置窗口透明度,传入一个0-1之间的浮点数。

如何将输入焦点设置为 Qt 中显示的对话框?

【中文标题】如何将输入焦点设置为 Qt 中显示的对话框?【英文标题】:How to set input focus to a shown dialog in Qt? 【发布时间】:2010-05-25 08:41:41 【问题描述】:

在一个按钮单击槽中,我创建并exec() 一个带有 NULL 父级的对话框。在对话框的构造函数中,我有:

this->activateWindow();
this->raise();
this->setFocus();

对话框是应用程序模式,具有很强的焦点。但是,在我单击它之前,它不会响应键盘事件。如何使对话框获得焦点而无需单击它?

【问题讨论】:

【参考方案1】:

问题是我设置了 Qt:Tool 窗口标志。使用 Qt::Popup 或 Qt::Window 会导致在显示对话框时自动设置输入焦点。

我自己使用了 Qt::Window。其他一些标志可能也会起作用,但主要的是带有 Qt::Tool 标志的 QDialog不会在显示对话框时自动设置输入焦点。

【讨论】:

【参考方案2】:

为对话框安装事件过滤器。

classObject->installEventFilter(this);

void className::keyPressEvent(QKeyEvent *event)

   if (event->key() == Qt::Key_Space) 
    
   focusNextChild();
    
   else 
   
  QLineEdit::keyPressEvent(event);
   

有关更多信息,请参阅此处。 http://doc.trolltech.com/4.6/eventsandfilters.html

【讨论】:

该类只是一个QDialog派生类,设置了以下窗口标志:(Qt::CustomizeWindowHint | Qt::FramelessWindowHint | Qt::Tool | Qt::WindowStaysOnTopHint它没有孩子也没有父母。 是的,无论如何,对于要获取键盘事件的对话框,为对话框安装事件过滤器,在对话框构造函数中编写 this->installEventFilter(this);在上面的示例中使用函数“focusNextChild()”。在对话牧民文件中声明keyPressEvent函数和cpp文件提供如上的实现 你是这个意思吗? this->installEventFilter(this);无效 QDialogDerived::keyPressEvent(QKeyEvent *event) QLineEdit::keyPressEvent(event); // 在这里做我的处理吗? 你在那里检查基于事件的键类型,如空格或输入键..等... 我试过了,但没有用。看,问题是,当显示对话框时,它没有输入焦点。 我可以用鼠标点击对话框,它获得输入焦点就好了。我需要让对话框自动获得输入焦点,而不必先点击它。 【参考方案3】:

在我的情况下,即使设置 Qt::Window 也没有成功。我不得不

QMetaObject::invokeMethod(widgetToFocus, "setFocus", Qt::QueuedConnection);

show()exec() 之前。

【讨论】:

以上是关于qt对话框失去焦点透明的主要内容,如果未能解决你的问题,请参考以下文章

失去焦点后无法取消对话框?

失去焦点时如何破坏无模式对话框?

关闭字体对话框时窗口失去焦点

如何检测我的应用程序在 Qt 中失去焦点?

android 自己定义dialog并实现失去焦点(背景透明)的功能

当我失去焦点时选项卡不起作用