C ++ QT桌面工具栏

时间:2014-08-11 19:25:27

标签: c++ windows qt toolbar

有没有办法在应用程序中制作工具栏" Netop Vision"在c ++中使用qt?

工具栏看起来像这样:http://i.stack.imgur.com/gZfKa.png 并由应用程序自动打开。它停靠在屏幕的顶部边框上,只在鼠标悬停时显示。是否可以重新创建这样的东西。

提前致谢!

1 个答案:

答案 0 :(得分:1)

1.使它在窗口的构造函数中看起来像面板传递Qt::FramelessWindowHint标志。

2.要将其停靠在显示器顶部,请使用QDesktopWidget().availableGeometry()获取显示器尺寸并将窗口移至顶部。

3.在窗口的构造函数中删除任务栏项目传递Qt::Tool标志。所以它看起来像这样:

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

}

4.你不能用Qt处理全局鼠标事件。您应该使用WINAPI来安装全局钩子并处理所有鼠标事件。

a)安装:

HINSTANCE hInstance = GetModuleHandle(NULL);

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

b)过程:

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();
}