-1

我应该触发我的 Qt/Qml 应用程序中的所有事件。特别是我试图触发键和鼠标事件。我会用一个 QTimer 来实现一种待机,当事件被触发时它会重置。是否可以在我的 Qt/Qml 应用程序中实现此功能?

4

1 回答 1

1

不可能从所有这些小部件触发事件(例如使用 onClicked() 信号)

为什么不?每个应用程序都有多个“小部件”,并且在几乎所有情况下都使用信号处理程序挂钩完成,其中一些非常罕见,我的意思是非常罕见的例外。

因此,我应该在 QApplication 上触发一般事件,以了解是否单击了鼠标或键盘按钮

从那里开始使用一些个人方法来确定该事件应该做什么?如果您的应用程序在 GUI 元素中确实像您声称的那样多样化,这听起来是一个非常糟糕的主意。我非常怀疑创建一个比已经实施的解决方案更强大或更有效的解决方案会更容易,或者在这方面问题更少。

要么您对 QML 及其编程范式完全陌生,并且还没有意识到处理程序挂钩是进行用户交互的预期方式,这是更有可能的情况,或者您正在尝试做一些非常“自定义”的事情。

为键盘和鼠标事件实现“全局”处理程序并不难,只需在应用程序窗口顶部放置一个MouseArea并使用它来捕获所有鼠标交互,并将键盘焦点设置在单个项目上作为键盘事件接收器。

然而,这意味着一旦您这样做,您将完全负责手动管理事件的引导方式。我已经为键盘事件这样做了,因为 QML 的“一个焦点项目”设计不适合我的特定需求,我可以告诉你这很麻烦。也为鼠标做这件事只会让它变得更难,更容易出错。

这也意味着您必须放弃 QML 提供的几乎所有 UI 元素,因为它们都依赖于接收实际焦点和事件。

Of course, you could intercept events at an even lower level from C++, but that will only be even harder and more prone to actually breaking stuff.

Considering your sparse activity history, It does look like what you really need to be doing is familiarizing yourself better with the programming paradigm behind QML than asking questions about things you don't need to do and really don't want to be doing, because they are complex and unnecessary and in most use cases represent anti-patterns that are very counterproductive.

于 2018-01-19T16:14:16.567 回答