将QWidget推广到QMainWindow或将QMainWindow从Qt Designer添加到QWidget

时间:2014-08-30 16:00:33

标签: c++ qt qt5 qwidget qmainwindow

我的问题:

我想自定义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);

使外部窗口小部件透明,并为我的内部窗口小部件添加阴影。从这开始,我可以创建一个自定义标题栏小部件,我可以实现,但我想要。

结果如下:

enter image description here

我的问题

我想让设计师将其作为主窗口使用,QWidget不允许我添加FROM THE DESIGNER 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);

结果如下:

enter image description here

我的问题:

如何从Qt Designer获得此结果?是否可以宣传QWidgetQMainWindow?我不能想到另一种做法......对我来说,使Qt Designer可以使用它非常重要,因为我打算将它作为一个模板小部件并且能够创建例如一个新的QCustomMainWindow表单Qt Creator,就像您可以创建QWidgetQMainWindow一样。

请帮忙!

1 个答案:

答案 0 :(得分:2)

这是另一个类似于你的问题:Qt4: Placing QMainWindow instance inside other QWidget/QMainWindow

只需添加我原来的评论:

QMainWindow开始,然后对其应用适当的标记。 QMainWindowQWidget的子类。如果在设计器中无法轻松完成,那么在代码中进行操作非常轻松。在ui->setup()调用之后立即在构造函数中执行此操作。

从QMainWindow

开始

Project Selection Dialog

Form Selection Dialog

自定义窗口标志

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

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

this->setWindowFlags(Qt::Widget);
  

这是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);

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

自定义窗口小部件属性

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

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;");

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

除了使用QMainWindow之外,另一条需要考虑的途径是QMdiSubWindow

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