有没有办法在应用程序中制作工具栏" Netop Vision"在c ++中使用qt?
工具栏看起来像这样:http://i.stack.imgur.com/gZfKa.png 并由应用程序自动打开。它停靠在屏幕的顶部边框上,只在鼠标悬停时显示。是否可以重新创建这样的东西。
提前致谢!
答案 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();
}