我目前正在开发一个应用程序,该应用程序启动显示附加对话框的单独进程。我试图实现的功能是模拟这些对话框的模式行为。更具体地说,我需要应用程序在对话框启动时停止处理所有输入(包括鼠标和键盘),并在对话框关闭时恢复。
对话框保持在应用程序顶部并不是那么重要,尽管如果您可以建议如何在不诉诸始终位于顶部行为的情况下做到这一点,那也很好。
需要注意的是,该应用程序是在 Windows 和 Linux 下编译的。此外,它也不是直接启动对话框的选项。它们位于单独的可执行文件中。此外,该应用程序是一个非常复杂的软件,因此单独禁用小部件不是一种选择,或者至少不是一种非常可行的选择。
I found lock() and unlock()Qt 3.3 中 QApplication 类中的函数。我们目前使用的是 Qt 4.5,它似乎没有该 API。事实上,Qt 4.5 QApplication 类似乎也不提供对事件循环的访问。
总结一下:如何在 Qt 应用程序中禁用/启用用户输入(包括鼠标和键盘快捷键)?
gj 已经提出了这个解决方案,但我想我粘贴我的实现仅供参考:
实现一个过滤器类来吸收用户输入操作。
class BusyAppFilter : public QObject
{
protected:
bool eventFilter( QObject *obj, QEvent *event );
};
bool BusyAppFilter::eventFilter(QObject *obj, QEvent *event)
{
switch ( event->type() )
{
case QEvent::KeyPress:
case QEvent::KeyRelease:
case QEvent::MouseButtonPress:
case QEvent::MouseButtonDblClick:
case QEvent::MouseMove:
case QEvent::HoverEnter:
case QEvent::HoverLeave:
case QEvent::HoverMove:
case QEvent::DragEnter:
case QEvent::DragLeave:
case QEvent::DragMove:
case QEvent::Drop:
return true;
default:
return QObject::eventFilter( obj, event );
}
}
然后将此代码放置在您的 QApplication 类中:
QCursor busyCursor( Qt::WaitCursor );
setOverrideCursor( busyCursor );
BusyAppFilter filter;
installEventFilter( &filter ) ;
//... do the process stuff ...
removeEventFilter( &filter );
restoreOverrideCursor();
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)