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对话框失去焦点透明的主要内容,如果未能解决你的问题,请参考以下文章