libvncclient SendPointerEvent отправка только левой кнопки

Я работаю над средством просмотра VNC, используя Qt 5 и libvncserver / libvncclient библиотека. Я создаю подкласс QWidget для предоставления виджета VNC Viewer.

Я могу подключиться к серверу 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 означает, что она не
нажат.

Вы можете использовать эти предопределенные маски кнопок, ORing их
вместе: 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

Решение

Это решено.

Проблема заключалась в том, что номера кнопок, излучаемых Qt, не совпадали с кнопками rfb, ожидаемыми сервером VNC. Опять же, документация libvncserver оказалась очень бесполезной, поэтому проблема с отображением кнопок не была заметна сразу.

Теперь все работает хорошо. Спасибо!

1

Другие решения


По вопросам рекламы [email protected]