*QFrame 类是可以具有框架的控件的基类。
Header: | #include <QFrame> |
CMake: | find_package(Qt6 REQUIRED COMPONENTS Widgets) target_link_libraries(mytarget PRIVATE Qt6::Widgets) |
qmake: | QT += widgets |
Inherits: | < QWidget |
Inherited By: |
【详细描述】
QMenu用来“提升”周围屏幕上方的菜单。QProgressBar具有“凹陷”的外观,QLabel具有“扁平”的外观,像这样有框架的控件是可以改变的。
//以下两段利用QFrame值改变了QLabel和QProgressBar的默认外观。
QLabel label(...);
label.setFrameStyle(QFrame::Panel | QFrame::Raised);
label.setLineWidth(2);
QProgressBar pbar(...);
label.setFrameStyle(QFrame::NoFrame);
QFrame类也可以直接创建没有任何内容的占位框架。
框架的样式由一个frame shape (框架形状)和一个shadow style (阴影样式)组成,用于在视觉上将框架与周围的控件区分开,使用setFrameStyle() 、frameStyle()可以设置和读取框架样式。
框架工具有三个描述边框粗细的属性: lineWidth, midLineWidth 和 frameWidth。
- 线条宽度是框架边框的宽度,可以对其进行自定义,以修改框架外观。
- 中线宽度指定框架中间额外线条的宽度,该线条使用第三种颜色来获得3D效果。注意:中线仅用于Box, HLine 和 VLine凸起或凹陷的框架。
- 框架宽度由框架样式决定,可用frameWidth() 函数获取这个值。
QWidget::setContentsMargins()函数用于设置框架和框架内容之间的距离。
下表显示了一些样式和线宽的组合:
【公共类型】
enum QFrame::Shadow
此枚举用于定义为框架提供3D效果的阴影类型。
常数 | 值 | 描述 |
---|---|---|
QFrame::Plain | 0x0010 | 框架和内容与周围环境保持水平,使用QPalette::WindowText颜色(没有任何3D效果)。 |
QFrame::Raised | 0x0020 | 框架和内容看起来凸起,使用当前颜色组的亮色和暗色绘制凸起线。 |
QFrame::Sunken | 0x0030 | 框架和内容看起来凹陷,使用当前颜色组的亮色和暗色绘制凹陷线。 |
enum QFrame::Shape
此枚举类型定义了可用的框架形状。
常数 | 值 | 描述 |
---|---|---|
QFrame::NoFrame | 0 | 无框架效果。 |
QFrame::Box | 0x0001 | 在其内容周围绘制一个方框。 |
QFrame::Panel | 0x0002 | 绘制一个平面,可以使内容凸起或凹陷。 |
QFrame::StyledPanel | 0x0006 | 绘制一个矩形面板,其外观取决于当前GUI样式。它可以升高或下沉。 |
QFrame::HLine | 0x0004 | 画一条不框住任何东西的水平线(用作分隔符)。 |
QFrame::VLine | 0x0005 | 绘制一条不包含任何内容的垂直线(用作分隔符)。 |
QFrame::WinPanel | 0x0003 | 绘制一个矩形面板,可以像Windows 2000中的面板一样升起或下沉。指定此形状会将线条宽度设置为2像素,提供WinPanel是为了兼容,为了追求GUI风格独立性,建议使用StyledPanel。 |
当它不调用时由QStyle、Shape相互作用,并与 QFrame::Shadow, lineWidth() 和midLineWidth()共同形成结果。
请参见 QFrame::Shadow, QFrame::style()和 QStyle::drawPrimitive().
enum QFrame::Shape
此枚举定义了两个常数,用于提取 frameStyle()的两个分量:
常数 | 值 | 描述 |
---|---|---|
QFrame::Shadow_Mask | 0x00f0 | frameStyle()中的Shadow 。 |
QFrame::Shape_Mask | 0x000f | frameStyle() 中的Shape 。 |
通常不需要使用这两个枚举值,因为 frameShadow() 和 frameShape() 已经提取了 frameStyle()的Shadow 和 Shape 部分。
【属性】
frameRect : QRect | 此属性保存框架的矩形。默认情况下,这是整个控件。设置矩形不会 导致控件update。当控件更改大小时,框架矩形会自动调整。 如果将矩形设置为空矩形(例如QRect(0, 0, 0, 0)),则生成的框架矩形等效于widget rectangle。 |
frameShadow : Shadow | 此属性保存框架样式中阴影值 。 |
frameShape : Shape | 此属性保存框架样式中的框架形状值。 |
frameWidth : const int | 此属性保存所绘制的框架的宽度。 请注意,框架宽度取决于frame style,而不仅仅是线宽和中线宽度。例如,指定的样式始终具有 0 的框架宽度,而样式Panel的框架宽度等于线宽。 |
lineWidth : int | 此属性保存线宽。 请注意,用作分隔符 (HLine and VLine) 的框架总线宽由 frameWidth指定。 |
midLineWidth : int | 此属性保留中线的宽度,默认值为 0。 |
【公有函数】
QFrame(QWidget *parent = nullptr, Qt::WindowFlags f = Qt::WindowFlags()) | 构造框架样式为NoFrame和 1 像素宽度的框架控件。parent 和 f 参数传递给构造函数。 | |
virtual | ~QFrame() | 析构。 |
QRect | frameRect() const | 返回框架的矩形。 |
QFrame::Shadow | frameShadow() const | 返回框架样式中阴影值 。 |
QFrame::Shape | frameShape() const | 返回框架样式中的框架形状值。 |
int | frameStyle() const | 返回框架样式。 |
int | frameWidth() const | 返回所绘制框架的宽度。 |
int | lineWidth() const | 返回线宽。 |
int | midLineWidth() const | 返回中线宽度。 |
void | setFrameRect(const QRect &) | 设置框架的矩形。 |
void | setFrameShadow(QFrame::Shadow) | 设置框架样式中阴影值 。 |
void | setFrameShape(QFrame::Shape) | 设置框架样式中的框架形状值。 |
void | setFrameStyle(int style) | 设置框架样式。 |
void | setLineWidth(int) | 设置线宽。 |
void | setMidLineWidth(int) | 设置中线宽度。 |
【重实现的公有函数】
virtual QSize | sizeHint() const override | 重实现QWidget::sizeHint (推荐尺寸函数)。 |
【受保护的函数】
virtual void | initStyleOption(QStyleOptionFrame *option) const |
用option的值初始化QFrame。当子类需要QStyleOptionFrame(绘制框架参数)但不想填写所有信息时很有用。 |
【重新实现的受保护函数】
virtual void | changeEvent(QEvent *ev) override |
virtual bool | event(QEvent *e) override |
virtual void | paintEvent(QPaintEvent *) override |