Есть ли способ сделать панель инструментов, например, в приложении "Netop Vision" в c++ с qt?
Панель инструментов выглядела так: http://i.stack.imgur.com/gZfKa.png и была открыта приложением автоматически. Он был пристыкован к верхней границе экрана и только что показан, когда мышь зависала. Возможно ли воссоздать что-то подобное.
Заранее спасибо!
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();
}