【发布时间】:2014-10-24 09:48:54
【问题描述】:
我的问题:
我想自定义 title bar 的工作方式和查找我的应用程序的方式。
我的想法:
我在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 不允许我添加 FROM THE DESIGNER tool bars、menu bar 和 status bar。
我想到的是添加一个 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);
这是结果:
我的问题:
我怎样才能从Qt Designer 获得这个结果?是否可以将QWidget 提升为QMainWindow?我想不出另一种方法......对我来说,让它可以从Qt Designer 使用真的很重要,因为我打算把它变成一个模板小部件并能够创建例如一个新的QCustomMainWindow 表单Qt Creator 就像你可以创建一个QWidget 或一个QMainWindow。
请帮忙!
【问题讨论】:
-
以
QMainWindow开头,然后对其应用适当的标志。 QMainWindow 是QWidget的子类。如果不能在设计器中轻松完成,那么在代码中完成是相当轻松的。在ui->setup()调用之后立即在构造函数中执行此操作。 -
@phyatt 你能在
apply the appropriate flags部分更具体吗?如您所见,为了获得阴影,我需要在QWidget上绘制QMainWindow,同时仍保留Qt Designer功能。这是我不知道的。
标签: c++ qt qt5 qwidget qmainwindow