今天学习的是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的角色。通常用于表示一个具有特定自定义操作的按钮,将其与其他标准按钮区分开来。


2713

被折叠的 条评论
为什么被折叠?



