部件和布局 - QGraphicsWidget
来源:互联网 发布:基于qt的socket编程 编辑:程序博客网 时间:2024/05/21 09:31
简述
QGraphicsWidget 继承自 QObject 和 QGraphicsItem,是 QGraphicsScene 中所有 widget items 的基类。
QGraphicsWidget 建立在 QGraphicsItem 之上,具有 QGraphicsItem 的所有功能。它保持了较小的资源占用,同时提供了两者的优点:
- 来自 QWidget 的额外功能,例如:样式、字体、调色板、布局、几何形状。
- 来自 QGraphicsItem 的分辨率独立性和坐标转换的支持。由于 Graphics View 使用真实的坐标而不是整数,因此 QGraphicsWidget 的 geometry 函数可以在 QRectF 和 QPointF 上操作。同时也能应用到边框的大小、边距和间距上。对于 QGraphicsWidget,规定内容边距为 (0.5, 0.5, 0.5, 0.5) 是非常常见的。例如:可以创建子部件和“顶级”窗口。在某些情况下,甚至可以将图形视图用于高级多文档界面的应用程序。
- 简述
- QGraphicsWidget 和 QWidget 的相似点
- QGraphicsWidget 和 QWidget 的差异
- 部件和布局
QGraphicsWidget 和 QWidget 的相似点
QGraphicsWidget 是一个扩展的基础 item,提供了 QGraphicsItem 额外的功能。它在很多方面类似于 QWidget:
- 提供调色板(palette)、字体(font)和 style()
- 有一个定义的 geometry()
- 支持使用 setLayout() 和 layout() 的布局
- 支持使用 grabShortcut() 和 insertAction() 的快捷方式和操作
由于 QGraphicsWidget 类似于 QWidget,并有着相似的 API,更容易从 QWidget 到 QGraphicsWidget,而不是 QGraphicsItem。
注意:基于 QWidget 的部件可以使用 QGraphicsProxyWidget 直接嵌入到 QGraphicsScene 中。
QGraphicsWidget 和 QWidget 的差异
除了相似之处,QGraphicsWidget 和 QWidget 之间也存在着显著的差异。
QGraphicsWidget 支持部分 QWidget 属性(Qt::WidgetAttribute),如下表所示(此表中未列出的任何属性都不受支持或未使用)。
部件和布局
与 QGraphicsItem 不同,QGraphicsWidget 不是一个抽象类,我们可以创建一个 QGraphicsWidget 实例,而不必子类化它。该方法对于仅用于将子 widgets 组织到一个布局中的 widgets 非常有用。
// 创建 widgetQLabel *pPixmapLabel = new QLabel();QLineEdit *pAccountLineEdit = new QLineEdit();QLineEdit *pPasswdLineEdit = new QLineEdit();QCheckBox *pRememberCheckBox = new QCheckBox();QCheckBox *pAutoLoginCheckBox = new QCheckBox();QPushButton *pLoginButton = new QPushButton();QPushButton *pRegisterButton = new QPushButton();QPushButton *pForgotButton = new QPushButton();pPixmapLabel->setStyleSheet("border-image: url(:/Images/logo); min-width:90px; min-height:90px; border-radius:45px; background:transparent;");pAccountLineEdit->setPlaceholderText(QStringLiteral("QQ号码/手机/邮箱"));pPasswdLineEdit->setPlaceholderText(QStringLiteral("密码"));pPasswdLineEdit->setEchoMode(QLineEdit::Password);pRememberCheckBox->setText(QStringLiteral("记住密码"));pAutoLoginCheckBox->setText(QStringLiteral("自动登录"));pLoginButton->setText(QStringLiteral("登录"));pRegisterButton->setText(QStringLiteral("注册账号"));pForgotButton->setText(QStringLiteral("找回密码"));pLoginButton->setFixedHeight(30);pAccountLineEdit->setFixedWidth(180);// 添加 widgetQGraphicsScene *pScene = new QGraphicsScene();QGraphicsProxyWidget *pPixmapWidget = pScene->addWidget(pPixmapLabel);QGraphicsProxyWidget *pAccountWidget = pScene->addWidget(pAccountLineEdit);QGraphicsProxyWidget *pPasswdWidget = pScene->addWidget(pPasswdLineEdit);QGraphicsProxyWidget *pRememberWidget = pScene->addWidget(pRememberCheckBox);QGraphicsProxyWidget *pAutoLoginWidget = pScene->addWidget(pAutoLoginCheckBox);QGraphicsProxyWidget *pLoginWidget = pScene->addWidget(pLoginButton);QGraphicsProxyWidget *pRegisterWidget = pScene->addWidget(pRegisterButton);QGraphicsProxyWidget *pForgotWidget = pScene->addWidget(pForgotButton);// 添加至网格布局中QGraphicsGridLayout *pLayout = new QGraphicsGridLayout();pLayout->addItem(pPixmapWidget, 0, 0, 3, 1);pLayout->addItem(pAccountWidget, 0, 1, 1, 2);pLayout->addItem(pRegisterWidget, 0, 4);pLayout->addItem(pPasswdWidget, 1, 1, 1, 2);pLayout->addItem(pForgotWidget, 1, 4);pLayout->addItem(pRememberWidget, 2, 1, 1, 1, Qt::AlignLeft | Qt::AlignVCenter);pLayout->addItem(pAutoLoginWidget, 2, 2, 1, 1, Qt::AlignRight | Qt::AlignVCenter);pLayout->addItem(pLoginWidget, 3, 1, 1, 2);pLayout->setHorizontalSpacing(10);pLayout->setVerticalSpacing(10);pLayout->setContentsMargins(10, 10, 10, 10);QGraphicsWidget *pWidget = new QGraphicsWidget();pWidget->setLayout(pLayout);// 将 item 添加至场景中pScene->addItem(pWidget);// 为视图设置场景QGraphicsView *pView = new QGraphicsView();pView->setScene(pScene);pView->show();
首先,我们基于 QWidget 构建了 QLabel、QLineEdit 等基本部件,使用 QGraphicsScene::addWidget() 直接将他们嵌入到 QGraphicsScene 中,同时返回对应的 QGraphicsProxyWidget。然后通过 QGraphicsGridLayout 将 QGraphicsProxyWidget 添加至网格布局中,再将网格布局添加至 QGraphicsWidget。最后将其添加至视图中,利用 QGraphicsView 显示出来。
如果需要高级输入焦点处理(例如,制表符焦点和激活或布局),QGraphicsWidget 可以作为自定义 item 的基本 item。
尽管 QGraphicsWidget 继承自 QObject 和 QGraphicsItem,也应该使用 QGraphicsItem 提供的函数,而不是 QObject,来管理父项和子项之间的关系。这些功能控制 items 的堆叠顺序及其所有权。
- 部件和布局 - QGraphicsWidget
- 部件和布局
- 窗口部件标志和几何布局
- 2. 块和布局,小部件
- Android小部件布局大小和点击事件
- QMainWindow中QDockWidget和中心部件的布局问题
- 基本UI部件、布局
- Qt的布局------部件布局
- 使用QTDesigner进行部件布局
- qt窗口部件的布局
- QT -- 窗口部件的布局
- Revit开发创建部件和部件视图
- QT入门笔记--窗口部件的布局
- 网页布局:浮动部件紧贴主体
- 各种小部件的垂直布局
- Android 自定义布局之组合部件
- 部件大小和字体设置
- VB 常用部件和引用
- zx-volte
- 解决VS控制台窗口自动关闭的问题
- iOS开发直播app-美颜滤镜GPUImageBeautifyFilter
- 数据结构实验5-递归
- 记录错误 谨记于心
- 部件和布局 - QGraphicsWidget
- 第十四周项目1数组大折腾(1)
- java语言编写99乘法表的变形
- caffe for windows的matlab接口(三):权重和特征图的可视化
- C库函数-perror()
- Hibernate的一对一关联关系
- Spark SQL 官方文档-中文翻译
- C# MD5 HASH的加密
- 卷积神经网络CNN(4)—— SegNet