• QFrame类学习笔记


    1、QFrame的作用

           QFrame类继承于QWidget类,被QAbstractScrollArea, QLabel, QLCDNumber, QSplitter, QStackedWidget, and QToolBox等类继承。 QFrame作为许多基础控件的基类,提供许多成员方法给子类,实现子类的框架样式的设计。框架样式主要由框架形状和用于从视觉上将框架与周围的小部件分开的阴影样式组成。即

    1. QFrame为子类提供了设计框架风格的成员函数,帮助子类设计特有的风格:或边框突起、或边框凹陷、或内容突起、或内容凹陷等效果。
    2. QFrame还可以直接用于创建不包含任何内容的简单占位符框架。

    2、QFrame的成员类型文档

         2.1 enum QFrame::Shadow   

             此枚举类型定义了用于给帧提供3D效果的阴影类型。

    QFrame::Plain0x0010边框或内容与周围控件看起来一样高
    QFrame::Raised0x0020边框或内容比周围控件看起来突起
    QFrame::Sunken0x0030边框或内容比周围控件看起来凹陷

         2.2 enum QFrame::Shape

                    这个enum类型定义了可用帧的形状。

    QFrame::NoFrame不画任何内容
    QFrame::Box0x0001画一个边框将内容包起来,凸显边框的阴影效果
    QFrame::Panel0x0002画一个内容平面,凸显内容的阴影效果
    QFrame::StyledPanel0x0006绘制一个外观取决于当前GUI样式的矩形面板。它可以突起也可以凹陷。
    QFrame::HLine0x0004绘制一条水平线,起分隔作用,凸显线的阴影效果
    QFrame::VLine0x0005绘制一条竖线,起分隔作用,凸显线的阴影效果
    QFrame::WinPanel0x0003绘制一个矩形面板,可以像Windows 2000那样向上或向下移动。指定此形状将线宽设置为2像素。WinPanel是为了兼容而提供的。

     对 于GUI风格的独立性,我们建议使用StyledPanel代替。

       2.3 enum QFrame::StyleMask

              该枚举定义了两个常量,可用于提取frameStyle()的两个组件。

    QFrame::Shadow_Mask0x00f0控件的framStyle()返回值的shadow部分
    QFrame::Shape_Mask0x000f控件的framStyle()返回值的shape部分

       2.4 使用QFrame可实现的样式组合

    3、QFrame常用成员函数

         3.1 成员函数原型介绍

     

    成员函数原型 描述
    QFrame(QWidget *parent = nullptr, Qt::WindowFlags f = Qt::WindowFlags())构造函数
    virtual   ~QFrame()     析构函数
     QRect frameRect() const       获取QFrame的框架大小
    void setFrameRect(const QRect &)设置QFrame的框架大小
    QFrame::Shadow  frameShadow() const获取阴影样式,
    void setFrameShadow(QFrame::Shadow)设置阴影样式,
    QFrame::Shape  frameShape() const获取框架的形状
    void setFrameShape(QFrame::Shape)设置框架的形状
    int  frameStyle() const获取框架的形状和阴影样式
    void setFrameStyle(int style)设置框架的形状和阴影样式
    int lineWidth() const获取框架线的宽度
     void setLineWidth(int)设置框架线的宽度
    int midLineWidth() const获取框架中线的宽度
    void setMidLineWidth(int)设置框架中线的宽度

       3.2 简单示例

           使用QFrame的子类QLabel完成简易登陆界面的设计,通过对QLabel框架样式的改变使其更符合QLineEdit、QPushButton等控件的风格。

     

    1. //.h文件
    2. class Widget : public QWidget
    3. {
    4. Q_OBJECT
    5. public:
    6. Widget(QWidget *parent = nullptr);
    7. ~Widget();
    8. private:
    9. QLabel *useLabel;
    10. QLabel *pwLabel;
    11. QLabel *useEdit;
    12. QLabel *pwEdit;
    13. QLabel *checkBtn;
    14. QLabel *cancelBtn;
    15. };
    16. //.c文件
    17. Widget::Widget(QWidget *parent)
    18. : QWidget(parent)
    19. {
    20. this->resize(400,550);
    21. useLabel = new QLabel(this);
    22. useLabel->setText("用户名:");
    23. useLabel->move(70,150);
    24. useLabel->resize(50,30);
    25. //设置"用户名"标签的框架样式为 无边框+无阴影
    26. useLabel->setFrameShape(QFrame::NoFrame);
    27. useLabel->setFrameShadow(QFrame::Plain);
    28. useEdit = new QLabel(this);
    29. useEdit->move(150,150);
    30. useEdit->resize(200,30);
    31. //设置"用户名"输入框的框架样式为 边框+突起
    32. useEdit->setFrameStyle(QFrame::Box|QFrame::Raised);
    33. useEdit->setLineWidth(2);
    34. pwLabel = new QLabel(this);
    35. pwLabel->setText("密码:");
    36. pwLabel->move(70,210);
    37. pwLabel->resize(50,30);
    38. //设置"密码"标签的框架样式为 无边框+无阴影
    39. pwLabel->setFrameStyle(QFrame::NoFrame|QFrame::Plain);
    40. pwEdit = new QLabel(this);
    41. pwEdit->move(150,210);
    42. pwEdit->resize(200,30);
    43. //设置"用户名"输入框的框架样式为 内容+凹陷
    44. pwEdit->setFrameStyle(QFrame::Panel|QFrame::Sunken);
    45. pwEdit->setLineWidth(2);
    46. checkBtn = new QLabel(this);
    47. checkBtn->setText("确认");
    48. checkBtn->setAlignment(Qt::AlignCenter);
    49. checkBtn->move(100,290);
    50. checkBtn->resize(80,30);
    51. //设置"确认"按钮的框架样式为 内容+突起
    52. checkBtn->setFrameStyle(QFrame::Panel|QFrame::Raised);
    53. checkBtn->setLineWidth(3);
    54. cancelBtn = new QLabel(this);
    55. cancelBtn->setText("取消");
    56. cancelBtn->setAlignment(Qt::AlignCenter);
    57. cancelBtn->move(240,290);
    58. cancelBtn->resize(80,30);
    59. //设置"取消"按钮的框架样式为 内容+突起
    60. cancelBtn->setFrameStyle(QFrame::Panel|QFrame::Raised);
    61. cancelBtn->setLineWidth(3);
    62. }

    效果图:

  • 相关阅读:
    架构学习之AArch64内存模型
    Auto.js中的脚本引擎
    极简主义,阿里P8大牛编写最新Springcloud实战笔记
    软件版本号详解
    hooks 源码浅析 — Scene
    Linux C应用编程-4-信号
    AOP基础&&进阶
    【小程序】WXSS模板样式
    MyBatis(5)-------动态SQL
    【Java】注解 之 定义注解
  • 原文地址:https://blog.csdn.net/weiweiqiao/article/details/133325675