【发布时间】:2012-01-30 05:52:52
【问题描述】:
我正在尝试制作一个具有自动隐藏菜单栏的 Qt 应用程序。我该怎么做?
【问题讨论】:
-
你能详细说明你想要达到的效果吗?
-
我希望菜单栏仅在鼠标光标垂直位于程序区域的 0-50 像素之间时出现,如果没有则自动隐藏。像windows任务栏自动隐藏功能。
我正在尝试制作一个具有自动隐藏菜单栏的 Qt 应用程序。我该怎么做?
【问题讨论】:
这是一个有趣的任务!好的,让我们看看...我建议您在QMainWindow::centralWidget() 中放置一个跟踪鼠标光标移动的代码。您需要先调用QWidget::setMouseTracking(true) 才能跟踪您的鼠标移动(默认情况下它们是关闭的)。代码可能如下所示:
QMainWindow *mainWindow = new QMainWindow;
MyWidget * myWidget = new MyWidget(mainWindow);
myWidget->setMouseTracking(true);
mainWindow->setCentralWidget(myWidget);
然后在您的小部件 QWidget::mouseMove() 事件中,您需要检测您是否在正确的区域。代码可能如下所示:
void MyWidget::mouseMoveEvent(QMouseEvent * event) {
bool menuVisible = inCorrectArea(event->pos());
mainWindow->menuBar()->setVisible(menuVisible);
...
}
有几种方法可以访问 MyWidget 中的“mainWindow”。其中之一是在 MyWidget 构造函数中传递 MainWindow 时将指针存储在 MyWidget 私有变量中。您还可以从 MyWidget 发出信号并在 MainWindow 中处理它。
希望这会有所帮助。
【讨论】: