我正在使用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
)
文件中的相关摘录:
指针事件包括光标位置和按钮蒙版。该 按钮掩码指示指示设备上的哪些按钮 按下。每个按钮由按钮掩码中的一个位表示。 1 表示按下按钮,而0表示不按下按钮 按压。
您可以通过对它们进行OR运算来使用这些预定义的按钮蒙版 在一起:rfbButton1Mask,rfbButton2Mask,rfbButton3Mask, rfbButton4Mask rfbButton5Mask
我不知道何时,何地以及如何使用这些预定义的按钮蒙版。我查看了枚举,它们都只对应'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);
}
有关如何进行右键点击的任何线索?
提前谢谢: - )
答案 0 :(得分:1)
这已经解决了。
问题是Qt发出的按钮数与VNC服务器预期的rfb按钮不匹配。同样,libvncserver的文档非常无用,因此按钮映射问题不会立即引起注意。
现在一切都运转良好。 :-D谢谢!