menuBar 使用疑问
hereis00 opened this issue · 1 comments
hereis00 commented
你好,请问一下,我使用了 menuBar,然后把这个 menuBar 设置为窗口的“titleBar”,拖动 menuBar 可以控制窗口移动,但是怎么让 menuBar 里面的菜单可以响应?我试了事件过滤器也毫无反应。
// exampleforwindows/mainwindow.cpp 文件的开头部分
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QRect>
MainWindow::MainWindow(QWidget *parent) :
CFramelessWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
#ifdef Q_OS_WIN
//feel free to change this number to see how it works
setResizeableAreaWidth(8);
//set titlebar widget, wo we can drag MainWindow by it
// 删除titleBar,并在ui中把horizontalLayout拿出来放到一个dockWidget,
// 是为了下面可以把这一堆按钮放到menuBar中。
// setTitleBar(ui->widgetTitlebar);
setTitleBar(menuWidget()); // 让menuBar作为“标题栏”
menuWidget()->setLayout(ui->horizontalLayout); // 把一堆按钮放上去
// ......其他代码......
hereis00 commented
我有方法解决我的问题了,做一个新的 menuWidget,把 ui 生成的控件作为新控件的子控件,这样菜单区域可以响应,而其他区域可以响应窗口操作。
//set titlebar widget, wo we can drag MainWindow by it
// setTitleBar(ui->widgetTitlebar);
QWidget* oldMenuWidget = menuWidget();
QWidget* newMenuWidget = new QWidget;
QHBoxLayout* lyt = new QHBoxLayout(newMenuWidget);
lyt->addWidget(new QPushButton("aaaaaaa"));
lyt->addWidget(oldMenuWidget);
lyt->addStretch();
lyt->addWidget(new QPushButton("bbbbbbb"));
setMenuWidget(newMenuWidget);
setTitleBar(menuWidget());