一、基础作用
-
QFrame 带边框 背景 阴影的基础容器控件
-
核心作用:
给一片区域加边框、分割线、圆角、阴影
二、两大属性
- frameShape 边框形状
cpp
frame->setFrameShape(QFrame::NoFrame); // 无边框(默认很多控件)
frame->setFrameShape(QFrame::Box); // 四周矩形框
frame->setFrameShape(QFrame::HLine); // 水平分割线
frame->setFrameShape(QFrame::VLine); // 垂直分割线
frame->setFrameShape(QFrame::Panel); // 凹陷面板
frame->setFrameShape(QFrame::StyledPanel); // 配合样式表最常用
- frameShadow 阴影凹凸效果
cpp
frame->setFrameShadow(QFrame::Plain); // 平面无凹凸
frame->setFrameShadow(QFrame::Raised); // 凸起
frame->setFrameShadow(QFrame::Sunken); // 凹陷
- 边框宽度
cpp
frame->setLineWidth(2); // 主线宽度
frame->setMidLineWidth(1); // 中间分隔线宽度(Panel/Box生效)
- 用 QFrame 做分割线
cpp
// 水平分割线
QFrame *hLine = new QFrame;
hLine->setFrameShape(QFrame::HLine);
hLine->setFrameShadow(QFrame::Sunken);
// 垂直分割线
QFrame *vLine = new QFrame;
vLine->setFrameShape(QFrame::VLine);
- 样式表美化
cpp
// 圆角灰色边框面板
frame->setStyleSheet(R"(
QFrame{
border:1px solid #cccccc;
border-radius:6px;
background-color:#f8f8f8;
}
)");
三、示例代码
cpp
MainWidget::MainWidget(QWidget *parent) : QWidget(parent)
{
QSplitter *splitter = new QSplitter(Qt::Horizontal, this);
splitter->setHandleWidth(4);
splitter->setCollapsible(0, false);
// 左侧列表外层套QFrame分组
QFrame *leftFrame = new QFrame;
leftFrame->setFrameShape(QFrame::StyledPanel);
leftFrame->setStyleSheet("border:1px solid #ddd; border-radius:4px;");
QVBoxLayout *leftLay = new QVBoxLayout(leftFrame);
leftLay->setContentsMargins(2,2,2,2);
list = new QListWidget;
leftLay->addWidget(list);
// 右侧内容区也可套Frame
QFrame *rightFrame = new QFrame;
rightFrame->setFrameShape(QFrame::StyledPanel);
QVBoxLayout *rightLay = new QVBoxLayout(rightFrame);
content = new Content;
rightLay->addWidget(content);
splitter->addWidget(leftFrame);
splitter->addWidget(rightFrame);
splitter->setStretchFactor(0,1);
splitter->setStretchFactor(1,3);
// 主布局
QHBoxLayout *mainLay = new QHBoxLayout(this);
mainLay->setContentsMargins(0,0,0,0);
mainLay->addWidget(splitter);
}