libvncclient SendPointerEvent只发送左按钮
libvncclient SendPointerEvent sending only left button
我正在使用Qt 5和libvncserver/libvncclient库开发VNC查看器。我正在对QWidget对象进行子类化,以提供VNC查看器小部件。
我可以连接到VNC服务器(运行TightVNC和Windows XP),我可以移动远程光标,可以左键单击,也可以在查看器中拖动内容,但我一直无法右键单击。这就好像服务器忽略了发送给它的右键单击,尽管无论我在哪里右键单击似乎都会改变服务器上窗口的焦点,但不会改变图标。
不幸的是,如果您还不是专家,那么libvncclient文档就没有太大帮助。我确实查阅了几个项目的代码以寻求帮助,并尝试使用那里的方法,但没有成功。我决定参考的是:https://github.com/LibVNC/libvncserver/blob/master/client_examples/SDLvncviewer.c#L383
这是SendPointerEvent函数:
rfbBool SendPointerEvent (rfbClient * client,
int x,
int y,
int buttonMask
)
文件的相关摘录:
指针事件包括一个光标位置和一个按钮掩码。这个按钮掩码指示定点设备上的按钮按下。每个按钮都由按钮掩码中的一个位表示。A 1表示按钮已按下,0表示未按下按下
您可以通过OR来使用这些预定义的按钮掩码一起:rfbButton1Mask,rfbButtion2Mask,rfb按钮4任务rfb按钮5任务
我不知道何时、何地以及如何使用这些预定义的按钮掩码。我查看了枚举,它们都与"1"、"2"、"3"等对应。Qt为左按钮发出"1",为右按钮发出"2"。
这是我的相关代码:
static int nButtonMask;
void VncViewer::handleMouseEvents(QMouseEvent* event)
{
if (event->type() == QMouseEvent::MouseButtonPress) {
nButtonMask |= event->button();
}
if (event->type() == QMouseEvent::MouseButtonRelease) {
nButtonMask &= ~event->button();
}
SendPointerEvent(g.currentViewer->client, event->x(), event->y(), nButtonMask);
nButtonMask &= ~(rfbButton4Mask | rfbButton5Mask);
}
关于如何让右键点击发挥作用,有什么线索吗?
提前感谢:-)
此问题已解决。
问题是Qt发出的按钮编号与VNC服务器预期的rfb按钮不匹配。同样,libvncserver的文档非常没有帮助,因此按钮映射问题并没有立即引起注意。
现在一切都很顺利-D谢谢!
- 问:如何使用C++中的按钮从窗口打开窗口
- 如何将点击的信号和插槽添加到qt中的自定义按钮中
- QML按钮点击功能执行顺序
- 当用户超过按钮点击限制时报告
- 函数计算用户按下按钮的频率
- 热键/按钮,根据需要进行编译,但不运行(在F5和Ctrl+Shift+B之间)
- FLTK:按下哪个按钮 - 将数字传递给按钮的回调 (lambda)
- 如何通过按下第三个窗口中的按钮,将QString从一个窗口获取到另一个窗口
- 垂直方向的 Gtk3+ 旋转按钮 (c/c++)
- Qt自定义QPush按钮未显示在布局上
- SDL 操纵杆按钮按下/C++
- 如何使用按钮更新GTK3图像以使用C++从相机捕获图片
- Qt中来自不同功能的按钮引用
- WinAPI 在单击第一个对话框上的按钮控件并销毁第一个对话框后创建第二个对话框
- ImGui 在单击按钮后冻结
- WinAPI 无法创建按钮
- 按钮悬停在 QT 中垂直布局的选项卡小部件中不起作用
- 如何使用connect将qml按钮与同一类的cpp函数连接起来
- 按钮按下打开 OLED ESP32
- 如何通过拖动鼠标QT检查按钮?鼠标移动事件