首页 > 其他分享 >处理事件

处理事件

时间:2023-08-27 18:45:40浏览次数:21  
标签:QMainWindow const win 处理事件 nodegui 事件 new

NodeGui 允许您侦听可能源自底层 Qt 小部件的各种事件。这些事件可以是简单的按钮单击或行编辑中的文本更改,甚至是隐藏和显示窗口之类的内容。

为此,我们需要将事件侦听器附加到相应的小部件。

从技术上讲,事件侦听器是一个 NodeJs EventEmitter 实例,用于侦听来自底层 Qt 小部件的事件。原生Qt小部件会将所有事件发送到NodeGui世界中的事件发射器,用户基本上可以订阅它。

让我们看一个例子,看看这在实践中是如何看的。

事件处理

下面的示例演示如何将事件侦听器添加到按钮小组件。

event example

const { QMainWindow, QPushButton } = require('@nodegui/nodegui');

const win = new QMainWindow();

const button = new QPushButton();
button.setText('Click me');
button.addEventListener('clicked', () => {
    console.log('the button was clicked');
});

win.setCentralWidget(button);
win.show();
global.win = win;

addEventListener 函数接受事件类型,后跟事件的处理程序。您可以通过多次调用 addEventListener 为同一事件注册多个处理程序。

在内部,nodegui 中的 Qt widget 有两种类型的事件:

  • Signals: 简而言之,对于不同的小部件,这些信号基本上是不同的。所以一个按钮可能有 ,信号,而一个 linedit 可能有信号。clickedpressedtextChanged
  • QEvents:这些是 NodeGui 世界中所有 widget/qobjects 的常见事件集。这些有时也很有帮助,但通常您最终会比这些常见事件更多地使用信号。

在 NodeGui 中,您可以使用相同的 addEventListener 函数收听信号和 QEvents。

我如何知道支持哪些事件?

为了找到小部件的所有支持事件,您可以查看

小部件的所有信号:

您可以订阅如下信号:

const { QMainWindow, QCheckBox } = require('@nodegui/nodegui');

const win = new QMainWindow();

const checkbox = new QCheckBox();
checkbox.setText('Check/Uncheck me');
checkbox.addEventListener('clicked', (checked) => {
    console.log('was checked', checked);
});

win.setCentralWidget(checkbox);
win.show();
global.win = win;

您在回调中收到的值取决于信号。有关更多详细信息,请参阅相应的信号文档。所有处理程序也都已键入。因此,如果您使用的是打字稿,则应为其获取正确的自动完成功能。

小部件的所有常见 QEvent

在nodegui中,所有这些常见的QEvents都用枚举类型表示:WidgetEventTypes

您可以像这样订阅QEvent:

const { QMainWindow, QLabel, WidgetEventTypes, QMouseEvent } = require('@nodegui/nodegui');

const win = new QMainWindow();

const label = new QLabel();
label.setText('Move your mouse here');
label.setMouseTracking(true);

label.addEventListener(WidgetEventTypes.MouseMove, (nativeEvt) => {
    const mouseEvt = new QMouseEvent(nativeEvt);
    console.log('mouseMoved at: ', { x: mouseEvt.x(), y: mouseEvt.y() });
});

win.setCentralWidget(label);
win.show();
global.win = win;

mouse event listener

请注意,每个 QEvent 处理程序在处理程序回调中都提供了对本机 QEvent 的引用。 并非所有原生 QEvent 包装器都已实现,我们可能需要您的帮助。随意加入并为nodegui核心做出贡献。

 

标签:QMainWindow,const,win,处理事件,nodegui,事件,new
From: https://www.cnblogs.com/full-stack-linux-new/p/17660656.html

相关文章