Панель инструментов рабочего стола C ++ QT

0

Есть ли способ сделать панель инструментов, например, в приложении "Netop Vision" в c++ с qt?

Панель инструментов выглядела так: http://i.stack.imgur.com/gZfKa.png и была открыта приложением автоматически. Он был пристыкован к верхней границе экрана и только что показан, когда мышь зависала. Возможно ли воссоздать что-то подобное.

Заранее спасибо!

  • 0
    Вы используете Qt Creator?
Теги:
qt
toolbar

1 ответ

1

1. Чтобы он выглядел как панель, передайте флаг Qt::FramelessWindowHint в constuctor вашего окна.

2. Для док-станции в верхней части монитора используйте QDesktopWidget().availableGeometry() чтобы получить размер монитора и перенести его в верхнюю часть QDesktopWidget().availableGeometry().

3.Чтобы избавиться от элемента панели задач, передайте Qt::Tool флаг в constuctor вашего окна. Так оно будет выглядеть так:

MyWindowWidget(QWidget* parent)
    : QWidget(parent, Qt::Tool | Qt::FramelessWindowHint | Qt::WindowStaysOnTopHint)
{

}

4. Что вы не можете сделать с Qt - это обрабатывать глобальные события мыши. Вместо этого вы должны использовать WINAPI, чтобы установить глобальный крючок и обработать все события мыши.

а) установить:

HINSTANCE hInstance = GetModuleHandle(NULL);

HHOOK hMouseHook = SetWindowsHookEx( WH_MOUSE_LL, mouseProc, hInstance, NULL );

б) процесс:

LRESULT CALLBACK mouseProc (int nCode, WPARAM wParam, LPARAM lParam)
{
  MOUSEHOOKSTRUCT * pMouseStruct = (MOUSEHOOKSTRUCT *)lParam;
  if (pMouseStruct != NULL)
  {
    if(wParam == WM_MOUSEMOVE)
    {
      int x = pMouseStruct->pt.x;
      int y = pMouseStruct->pt.y;

      //g_myWindowWidget is a pointer to an instance of MyWindowWidget
      g_myWindowWidget->processMouseMove(x, y);
    }        
  }
  return CallNextHookEx(hMouseHook, nCode, wParam, lParam);
}

void MyWindowWidget::processMouseMove(int x, int y)
{
 const bool hasMouse = rect().contains(mapFromGlobal(QPoint(x, y)));
 if (hasMouse && !isVisible())
    show();
 else if (!hasMouse() && isVisible())
    hide();
}

Ещё вопросы

Сообщество Overcoder
Наверх
Меню