我的问题:
我想要自定义标题栏在我的应用程序中的工作和外观。
我的想法:
我在Qt Designer中创建了一个新的QWidget表单,并添加了一个QWidget。我在构造函数中添加了以下代码:
setAttribute(Qt::WA_TranslucentBackground);
setWindowFlags(Qt::FramelessWindowHint);
QGraphicsDropShadowEffect* effect = new QGraphicsDropShadowEffect();
effect->setBlurRadius(20);
effect->setXOffset(0);
effect->setYOffset(0);
setGraphicsEffect(effect);
这将使外部小部件透明,并在我的内部小部件上添加阴影。从此,我可以创建自定义标题栏小部件,然后按照自己的想法实现它。
这是结果:
我的问题
我希望将其作为主窗口从设计师中使用,但 QWidget
不允许我添加来自设计师的 工具栏
、菜单栏
和 状态栏
。
我考虑的是将 QMainWindow 小部件作为外部 QWidget 的子小部件(它是透明的并作为我的阴影支撑(阴影绘制在上面))。我成功地做到了这一点,但只能通过代码实现:
QMainWindow *centralwidget = new QMainWindow();
centralwidget->setStyleSheet("background-color: lightgray;");
centralwidget->setGeometry(0, 0, 50, 20);
centralwidget->setWindowFlags(Qt::Widget);
this->layout()->addWidget(centralwidget);
QMenuBar *menuBar = new QMenuBar(centralwidget);
menuBar->addAction("Action");
QStatusBar *statusBar = new QStatusBar;
statusBar->showMessage("Status bar here");
centralwidget->addToolBar("tool bar");
centralwidget->setMenuBar(menuBar);
centralwidget->setStatusBar(statusBar);
这是结果:
![enter image description here](https://istack.dev59.com/1AtDQ.webp)
如何从Qt Designer实现这个结果?能否将QWidget提升为QMainWindow?我想不到其他的方法...让它可以在Qt Designer中可用对我来说非常重要,因为我打算将其创建为模板小部件,并能够像创建QWidget或QMainWindow一样从Qt Creator中创建一个新的QCustomMainWindow表单。
请帮忙!
QMainWindow
开始,然后对其应用适当的标志。 QMainWindow 是QWidget
的子类。如果在设计师中不能轻松完成,则在代码中执行起来非常简单。在ui->setup()
调用之后,在构造函数中执行此操作。 - phyatt