将QWidget升级到QMainWindow或从Qt Designer将QMainWindow添加到QWidget

Jac*_*ieg 5 c++ qt qwidget qmainwindow qt5

我的问题:

我想自定义title bar工作方式并查找我的应用程序。

我的想法:

我在中创建了一个新QWidget表单Qt Designer并添加了一个QWidget。我在构造函数中添加了以下代码:

setAttribute(Qt::WA_TranslucentBackground);
setWindowFlags(Qt::FramelessWindowHint);

QGraphicsDropShadowEffect* effect = new QGraphicsDropShadowEffect();
effect->setBlurRadius(20);
effect->setXOffset(0);
effect->setYOffset(0);
setGraphicsEffect(effect);
Run Code Online (Sandbox Code Playgroud)

这使外部小部件透明,并向我的内部小部件添加阴影。由此,我可以创建一个自定义标题栏小部件,可以根据需要实现它。

结果如下:

在此处输入图片说明

我的问题

我想打从设计师这个可以作为一个主窗口和QWidget不允许我添加从设计师tool barsmenu barstatus 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);
Run Code Online (Sandbox Code Playgroud)

结果如下:

在此处输入图片说明

我的问题:

我如何从中获得此结果Qt Designer?是否有可能推广QWidgetQMainWindow?我想不出另一种方法...对我来说,使它可用非常重要,Qt Designer因为我打算使其成为模板小部件并能够像创建a 或a 一样创建新QCustomMainWindow表单。Qt CreatorQWidgetQMainWindow

请帮忙!

phy*_*att 3

这是另一个与您类似的问题:Qt4: Placeing QMainWindow instance inside other QWidget/QMainWindow

只是添加我原来的评论:

从 a 开始QMainWindow,然后对其应用适当的标志。QMainWindow是 的子类QWidget。如果在设计器中无法轻松完成,那么在代码中完成就相当轻松了。调用后立即在构造函数中执行此操作ui->setup()

从 QMainWindow 开始

项目选择对话框

表单选择对话框

自定义窗口标志

所以在 mainwindow.cpp 的构造函数中,你把

http://qt-project.org/doc/qt-5/qt.html#WindowType-enum

this->setWindowFlags(Qt::Widget);
Run Code Online (Sandbox Code Playgroud)

这是 QWidget 的默认类型。如果这种类型的小部件有父级,则它们是子小部件;如果它们没有父级,则它们是独立窗口。另请参见 Qt::Window 和 Qt::SubWindow。

// or if you want to apply more than one you, "or" it together, like so:
this->setWindowFlags(Qt::FramelessWindowHint | Qt::WindowStaysOnTopHint | Qt::Tool);
Run Code Online (Sandbox Code Playgroud)

尝试其中几个,看看您喜欢什么。

自定义小部件属性

还有小部件属性,可以让您对小部件的外观和行为进行强有力的控制。

http://qt-project.org/doc/qt-5/qt.html#WidgetAttribute-enum

Qt 样式表

除了上面的所有标志和属性之外,您还可以使用样式表修改大量内容:

http://qt-project.org/doc/qt-5/stylesheet-reference.html

this->setStyleSheet("background: #000000;");
Run Code Online (Sandbox Code Playgroud)

Qt Designer 自定义小部件

另外,如果您有兴趣在 Qt Designer 中使其成为可重用的东西,您可以将其制作成 Qt Designer 插件或自定义小部件。

http://qt-project.org/doc/qt-4.8/designer-using-custom-widgets.html

http://qt-project.org/doc/qt-4.8/designer-creating-custom-widgets.html

QMdiArea 和 QMdiWindow

除了使用之外,另一个值得研究的途径QMainWindowQMdiSubWindow

http://qt-project.org/doc/qt-5/QMdiSubWindow.html