学习目标: Qt 基础组件复习/速学 容器篇
前置环境
运行环境:qt creator 4.12
学习内容:
容器就是装东西的,所有我们会使用到之前学习的知识。
setQGroup(); //分组
setScrollArea(); //滑动条区域
Widget::setTabwidge(); //表单容器
Widget::setQFrame(); //新窗口的边框操作
Widget::setQdockWidge(); //可移动小窗口
详细代码和运行测试
分组容器
void Widget::setQGroup(){
//组合框
QGroupBox* gbox = new QGroupBox("1组",this);
//单选按钮
QRadioButton* rb1 = new QRadioButton("单选项1",this);
QRadioButton* rb2 = new QRadioButton("单选项2",this);
QVBoxLayout* vblayout = new QVBoxLayout(this); //垂直布局对象
vblayout->addWidget(rb1);
vblayout->addWidget(rb2);
gbox->setLayout(vblayout);
//单选按钮
QCheckBox* rb3 = new QCheckBox("多选项3",this);
QCheckBox* rb4 = new QCheckBox("多选项4",this);
//组合框2
QGroupBox* gbox2 = new QGroupBox("2组",this);
QVBoxLayout* vblayout2 = new QVBoxLayout(this); //垂直布局对象
vblayout2->addWidget(rb3);
vblayout2->addWidget(rb4);
gbox2->setLayout(vblayout2);
QCheckBox* cb5=new QCheckBox("多选5",this);
QCheckBox* cb6=new QCheckBox("多选6",this);
cb6->setTristate(true); //3态
cb6->setChecked(true); //默认选择
QRadioButton* rdb5 = new QRadioButton("单7",this);
QVBoxLayout* vblayout3 = new QVBoxLayout(this);
vblayout3->addWidget(cb5);
vblayout3->addWidget(cb6);
vblayout3->addWidget(rdb5);
QGroupBox* gb3=new QGroupBox("3组",this);
gb3->setLayout(vblayout3);
gb3->setCheckable(true);
QPushButton* pb = new QPushButton("菜单",this);
QMenu* mu =new QMenu(this);
mu->addAction("白菜");
mu->addAction("猪头肉");
mu->addAction("炒鸡");
//找到白菜实例 增加子选项
QList<QAction*> actions = mu->actions();
QAction* baicaiAction = nullptr;
for (QAction* action : actions) {
if (action->text() == "白菜") {
baicaiAction = action;
break;
}
}
QMenu* bc =new QMenu(this);
bc->addAction("白灼");
bc->addAction("爆炒");
baicaiAction->setMenu(bc);
pb->setMenu(mu);
QVBoxLayout* vb4 = new QVBoxLayout(this);
vb4->addWidget(pb);
QGroupBox* gb4=new QGroupBox("4组",this);
gb4->setLayout(vb4);
glayout = new QGridLayout(this);
glayout->addWidget(gbox,0,0);
glayout->addWidget(gbox2,0,1);
glayout->addWidget(gb3,1,0);
glayout->addWidget(gb4,1,1);
setLayout(glayout);
}
滑动条容器
void Widget::setScrollArea(){
QImage* img= new QImage(":/new/prefix1/C:/Users/jbj/Downloads/Telegram Desktop/IMG_5035.JPG");
QLabel* lb = new QLabel();
// 设置是否根据标签尺寸缩放内容。
lb->setScaledContents(true);
lb->setPixmap(QPixmap::fromImage(*img));
lb->setFixedSize(300, 500);
QScrollArea* scrollA = new QScrollArea(this);
scrollA->setWidget(lb);
//scroll设置属性
// 设置水平和垂直滚动条的显示策略为"根据需要显示"
scrollA->setHorizontalScrollBarPolicy(Qt::ScrollBarAsNeeded);
// 设置内容控件在 QScrollArea 内的对齐方式为居中
scrollA->setAlignment(Qt::AlignCenter);
// 设置内容控件可以根据 QScrollArea 的大小自动调整大小
scrollA->setWidgetResizable(true);
glayout->addWidget(scrollA,0,2,2,1);
}
表单容器
就像excel换页一样,所有我称为表单
void Widget::setwidge(){ //Qtable Qwind Gridlayout(data)
QTabWidget * twg =new QTabWidget(this);
twg->setGeometry(40,40,100,100);
QWidget *qw1=new QWidget();
twg->addTab(qw1,"进程");
QGridLayout* grid1 = new QGridLayout();
QLabel* lb1 = new QLabel("输入进程:",qw1);
QLineEdit *proc=new QLineEdit();
QPushButton *pbt1=new QPushButton("消息框...");
connect(pbt1,SIGNAL(clicked(bool)),this,SLOT(setwidgeSlots()));
grid1->addWidget(lb1,0,0);
grid1->addWidget(proc,0,1);
grid1->addWidget(pbt1,0,2);
qw1->setLayout(grid1);
QWidget* qw2 = new QWidget();
twg->addTab(qw2,"网络");
twg->show();
QLabel* lb2 = new QLabel("网络:",qw1);
QGridLayout* grid2 = new QGridLayout();
grid2->addWidget(lb2,0,0);
qw2->setLayout(grid2);
glayout->addWidget(twg,3,0,3,3);
}
void Widget::setwidgeSlots(){
QMessageBox::information(NULL,"标题","成功",QMessageBox::Ok);
}
边框容器
主要就是对边框进行操作,比如重影。
void Widget::setQFrame(){
QFrame * qfram = new QFrame(this);
QHBoxLayout* hbox = new QHBoxLayout(qfram);
hbox->addWidget(new QPushButton("A"));
hbox->addWidget(new QPushButton("b"));
//设置线宽
qfram->setLineWidth(3);
//设置边框类型
qfram->setFrameShape(QFrame::StyledPanel);
QFrame * qfram2 = new QFrame(this);
//设置框架的阴影。阴影可以是Plain、Raised、Sunken
qfram2->setFrameShadow(QFrame::Sunken);
//设置线宽
qfram2->setLineWidth(2);
//设置框架的样式。样式是形状和阴影的位或(OR)组合
qfram2->setFrameStyle(QFrame::Panel | QFrame::Raised);
//设置大小策略,这决定了控件如何在布局中改变大小
qfram2->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
//设置样式表,这可以用来自定义控件的外观
//qfram2->setStyleSheet("background-color: blue;");
glayout->addWidget(qfram,0,3);
glayout->addWidget(qfram2,3,3);
}
固定又可移动窗口
双击就可移动,再次双击又固定。
void Widget::setQdockWidge(){
QDockWidget* dockWidge = new QDockWidget(this);
dockWidge->setFloating(true);
dockWidge->setWidget(new QLabel("helo word"));
dockWidge->setMinimumSize(100,100);
glayout->addWidget(dockWidge);
}