Qt 基础组件速学 容器篇

学习目标: 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);

}

最后附上源代码链接

对您学习/复习有帮助的话,帮忙点个star

10-containers · jbjnb/Qt demo - 码云 - 开源中国 (gitee.com)

  • 5
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值