QT学习第二天

今天学习的是QT开发中的常用控件。

布局管理和空间间隔控件:

Vertical Layout:垂直布局                         

Horizontal Layout:横向(水平)布局

Grid Layout:网格(栅格)布局             

Form Layout:表单布局 

Horizontal Spacer :水平间隔                

Vertical Spacer:垂直间隔

主要介绍网格布局和表单布局

网格布局

//widget.cpp文件
#include "widget.h"

Widget::Widget(QWidget *parent)
    : QWidget(parent)
{
    pbt1=new QPushButton();
    pbt1->setText("第一区,顶部菜单栏选项");
    pbt1->setFixedHeight(100);
    pbt1->setSizePolicy(QSizePolicy::Expanding,QSizePolicy::Expanding);

    pbt2=new QPushButton();
    pbt2->setText("第二区,侧边栏选项");
    pbt2->setFixedWidth(150);
    pbt2->setSizePolicy(QSizePolicy::Expanding,QSizePolicy::Expanding);

    pbt3=new QPushButton();
    pbt3->setText("第三区,底部选项");
    pbt3->setFixedHeight(100);
    pbt3->setSizePolicy(QSizePolicy::Expanding,QSizePolicy::Expanding);

    pbt4=new QPushButton();
    pbt4->setText("第四区,中间选项");
    //pbt4->setFixedHeight(100);
    pbt4->setSizePolicy(QSizePolicy::Expanding,QSizePolicy::Expanding);

    gdly=new QGridLayout();

    //设置左侧、顶部、右侧、底部边距,主要方便布局周围进行使用
    gdly->setContentsMargins(100,100,100,100);
    gdly->setSpacing(40);
    gdly->addWidget(pbt1,0,1);
    gdly->addWidget(pbt2,0,0,3,1);
    gdly->addWidget(pbt3,2,1);
    gdly->addWidget(pbt4,1,1);
    this->setLayout(gdly);
}

Widget::~Widget() {}
  • setSpacing()是布局管理器的成员函数,用于设置布局中部件之间的间距。

  • setSizePolicy函数用于设置QPushButton的尺寸策略。该函数接受两个参数,分别对应水平方向和垂直方向的尺寸策略。Expanding意味着它在可用空间中可以扩展,会根据布局内其他部件的尺寸策略以及整体布局约束来合理分配空间。

最后如图所示:

表单布局

//widget.cpp文件
#include "widget.h"
#include<QFormLayout>
#include<QLineEdit>

Widget::Widget(QWidget *parent)
    : QWidget(parent)
{
    QFormLayout *qLayout=new QFormLayout(this);
    QLineEdit *le1=new QLineEdit();
    QLineEdit *le2=new QLineEdit();
    QLineEdit *le3=new QLineEdit();

    qLayout->addRow("学号",le1);
    qLayout->addRow("姓名",le2);
    qLayout->addRow("学校",le3);
    qLayout->setSpacing(20);

    qLayout->setRowWrapPolicy(QFormLayout::WrapAllRows);
    //qLayout->setRowWrapPolicy(QFormLayout::WrapLongRows);
    
    //设置对齐方式
    qLayout->setLabelAlignment(Qt::AlignRight);
}

Widget::~Widget() {}

 WrapAllRows是将标签显示在单行编辑框上面,WrapLongRows是将标签显示在同一行

最后如图所示:

命令按钮组

Push Button(命令按钮)

#include "mainwindow.h"
#include <QPushButton>

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
{
    this->setGeometry(150,150,300,300);

    QPushButton *pbt1=new QPushButton("按钮1",this);
    QPushButton *pbt2=new QPushButton("按钮2",this);

    pbt1->setGeometry(20,20,150,50);
    pbt2->setGeometry(20,90,150,50);

    connect(pbt1,SIGNAL(clicked(bool)),this,SLOT(pushbutton1_clicked()));
    connect(pbt2,SIGNAL(clicked(bool)),this,SLOT(pushbutton2_clicked()));
}

MainWindow::~MainWindow() {}

void MainWindow::pushbutton1_clicked(){
    this->setStyleSheet("QMainWindow{background-color:rgba(255,255,0,100%);}");
}

void MainWindow::pushbutton2_clicked(){
    this->setStyleSheet("QMainWindow{background-color:rgba(255,0,0,100%);}");
}

 widget.setGeometry(x,y,width,height);//x,y是部件左上角相对于父部件的坐标

最后点击按钮会变色:

 Radio Button(单选按钮)

#include "mainwindow.h"
#include <QPushButton>
#include <QRadioButton>

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
{
    this->setGeometry(150,150,300,300);

    QRadioButton *radb1=new QRadioButton(this);
    QRadioButton *radb2=new QRadioButton(this);

    radb1->setGeometry(20,20,150,40);
    radb2->setGeometry(20,80,150,40);

    radb1->setText("选择按钮1");
    radb2->setText("选择按钮2");

    //设置命令按钮默认值Check false true
    radb1->setChecked(false);
    radb2->setChecked(true);
}

MainWindow::~MainWindow() {}

Check Box(复选框按钮)

#include "mainwindow.h"
#include <QPushButton>
#include <QRadioButton>

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
{
    this->setGeometry(150,150,300,300);

    cb=new QCheckBox(this);
    cb->setGeometry(30,50,250,50);

    //开启三态模式,必须开启,否则只有两种状态
    cb->setTristate();

    //初始化三态复选框状态
    cb->setCheckState(Qt::PartiallyChecked);

    cb->setText("初始化状态为:PartiallyChecked状态");

    connect(cb,SIGNAL(stateChanged(int)),this,SLOT(checkboxstate(int)));
}

MainWindow::~MainWindow() {}

void MainWindow::checkboxstate(int istat){
    switch(istat){
    case Qt::Checked:
        cb->setText("选中状态OK");
        break;

    case Qt::PartiallyChecked:
        cb->setText("半选中状态");
        break;

    case Qt::Unchecked:
        cb->setText("非选中状态");
        break;

    default:
        break;
    }
}

Command Link Button(命令链接按钮)

#include "mainwindow.h"
#include<QDesktopServices>
#include<QUrl>

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
{
    this->setGeometry(300,150,500,300);

    clb=new QCommandLinkButton("testclb","clicked testclb",this);
    clb->setGeometry(50,100,250,60);

    connect(clb,SIGNAL(clicked()),this,SLOT(clbClicked()));

}

MainWindow::~MainWindow() {}

void MainWindow::clbClicked(){
    QDesktopServices::openUrl(QUrl("https://www.msn.cn/zh-cn/news/other/%E5%A7%BF%E6%80%81%E8%AF%A2%E9%97%AEdeepseek%E5%8D%B4%E7%88%86%E5%87%BAlpl%E5%A4%A7%E9%BB%91%E6%96%99-%E4%B8%96%E7%95%8C%E6%9C%80%E5%BC%BA%E4%B8%8A%E5%8D%95-%E5%85%A8%E9%83%BD%E6%98%AF%E9%9F%A9%E5%9B%BD%E4%BA%BA/ar-AA1yqLXY?ocid=msedgntp&pc=CNNDDB&cvid=4fdc96560be34e2ef30e8c5092b30d42&ei=6"));
}

Dialog Button Box(按钮盒) 

#include "mainwindow.h"
#include <QDebug>

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
{
    this->setGeometry(300,150,500,300);

    dbb=new QDialogButtonBox(this);
    dbb->setGeometry(30,200,200,30);

    dbb->addButton(QDialogButtonBox::Cancel);
    dbb->button(QDialogButtonBox::Cancel)->setText("取消");

    pb=new QPushButton("自定义");

    dbb->addButton(pb,QDialogButtonBox::ActionRole);

    connect(dbb,SIGNAL(clicked(QAbstractButton*)),this,SLOT(dbbpbClicked(QAbstractButton*)));
}

MainWindow::~MainWindow() {}

void MainWindow::dbbpbClicked(QAbstractButton *bt){
    if(bt==dbb->button(QDialogButtonBox::Cancel)){
        qDebug()<<"你点击了【取消】按钮";
    }else if(bt==pb){
        qDebug()<<"你点击了【自定义】按钮";
    }
}

QDialogButtonBox预定义了一系列常用的按钮类型,如Cancel、OK、Apply等,方便开发者快速添加符合常规操作逻辑的按钮到盒子中。

ActionRole:指定了pb的角色。通常用于表示一个具有特定自定义操作的按钮,将其与其他标准按钮区分开来。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值