NodeGui 允许您侦听可能源自底层 Qt 小部件的各种事件。这些事件可以是简单的按钮单击或行编辑中的文本更改,甚至是隐藏和显示窗口之类的内容。
为此,我们需要将事件侦听器附加到相应的小部件。
从技术上讲,事件侦听器是一个 NodeJs EventEmitter 实例,用于侦听来自底层 Qt 小部件的事件。原生Qt小部件会将所有事件发送到NodeGui世界中的事件发射器,用户基本上可以订阅它。
让我们看一个例子,看看这在实践中是如何看的。
事件处理
下面的示例演示如何将事件侦听器添加到按钮小组件。
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 可能有信号。
clicked
pressed
textChanged
- QEvents:这些是 NodeGui 世界中所有 widget/qobjects 的常见事件集。这些有时也很有帮助,但通常您最终会比这些常见事件更多地使用信号。
在 NodeGui 中,您可以使用相同的 addEventListener 函数收听信号和 QEvents。
我如何知道支持哪些事件?
为了找到小部件的所有支持事件,您可以查看
小部件的所有信号:
- https://docs.nodegui.org/docs/api/generated/globals/#interfaces
- https://docs.nodegui.org/docs/api/generated/globals/#type-aliases
您可以订阅如下信号:
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;
请注意,每个 QEvent 处理程序在处理程序回调中都提供了对本机 QEvent 的引用。 并非所有原生 QEvent 包装器都已实现,我们可能需要您的帮助。随意加入并为nodegui核心做出贡献。
标签:QMainWindow,const,win,处理事件,nodegui,事件,new From: https://www.cnblogs.com/full-stack-linux-new/p/17660656.html