gpt4 book ai didi

c++ - 从 Qt Designer 将 QWidget 提升为 QMainWindow 或将 QMainWindow 添加到 QWidget

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:39:19 52 4
gpt4 key购买 nike

我的问题:

我想自定义标题栏 的工作方式和查找我的应用程序的方式。

我的想法:

我在 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);

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

这是结果:

enter image description here

我的问题

我想让它在设计器中用作主窗口,QWidget 不允许我添加 FROM THE DESIGNER tool bars, menu条状态栏

我想到的是添加一个 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 获得这个结果?是否可以将 QWidget 提升为 QMainWindow?我想不出另一种方法......让它在 Qt Designer 中可用对我来说真的很重要,因为我打算将它变成一个模板小部件并能够创建例如一个新的 QCustomMainWindow 形式 Qt Creator 就像你可以创建一个 QWidget 或一个 QMainWindow 一样。

请帮忙!

最佳答案

这是另一个与您类似的 SO 问题: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);

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

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

自定义小部件属性

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

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

关于c++ - 从 Qt Designer 将 QWidget 提升为 QMainWindow 或将 QMainWindow 添加到 QWidget,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25584260/

52 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com