我的问题:
我想自定义标题栏的工作方式并查找我的应用程序.
我的想法:
我在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工具栏,菜单栏和状态栏.
我想到的是添加一个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一样.
请帮忙!
最佳答案 这是另一个类似于你的问题:
Qt4: Placing QMainWindow instance inside other QWidget/QMainWindow
只需添加我原来的评论:
从QMainWindow开始,然后对其应用适当的标志. QMainWindow是QWidget的子类.如果在设计器中无法轻松完成,那么在代码中进行操作非常轻松.在ui-> setup()调用之后立即在构造函数中执行此操作.
从QMainWindow开始
自定义窗口标志
所以在mainwindow.cpp的构造函数中,你放了
http://qt-project.org/doc/qt-5/qt.html#WindowType-enum
this->setWindowFlags(Qt::Widget);
This is the default type for QWidget. Widgets of this type are child
widgets if they have a parent, and independent windows if they have no
parent. See also Qt::Window and 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