qt开发常用控件

qt5 布局管理与空间间隔

在这里插入图片描述
空间名称依次如下:
vertical layout: 垂直布局
Horizontal layout: 水平布局
Grid layout : 网格布局
Form layout:表单布局
Horizontal spacer:水平间隔
vertical spacer:垂直间隔
这些控件可以手动操作也可以代码操作,我这边只展示代码操作的方式。

QGridLayout常用函数:
setSpacing(int spacing) :此函数将垂直和水平间距设置为spacing。
setContentsMargins(int left, int top, int right, int bottom): 设置left, top, right, bottom 边距,方便布局周围进行使用
addWidget: 参数1 为要插入的子对象,参数2与参数3是要插入的行与列,参数4与参数5是占用的行与列。参数6是指定对齐的方式。
setMargin:部件与左上角窗体的偏移

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>
#include <QPushButton>
#include <QLabel>
#include <QGridLayout>

class Widget : public QWidget
{
    Q_OBJECT

public:
    Widget(QWidget *parent = nullptr);
    ~Widget();

public:
    QGridLayout *layout ;
    QPushButton *btn1;
    QPushButton *btn2;
    QPushButton *btn3;
};
#endif // WIDGET_H

#include "widget.h"
#include <QPushButton>
#include <QLabel>
#include <QGridLayout>

Widget::Widget(QWidget *parent)
    : QWidget(parent)
{
    btn1 = new QPushButton(this);
    btn1->setText("btn1");
    btn2 = new QPushButton(this);
    btn2->setText("btn2");
    btn3 = new QPushButton(this);
    btn3->setText("btn3");
    layout = new QGridLayout(this);

//    设置left, top, right, bottom 边距,方便布局周围进行使用
    layout->setContentsMargins(0,0,0,0);
    layout->setSpacing(0);
//    layout->/*setMargin*/(30); 部件与左上角窗体的偏移
    layout->addWidget(btn1, 0 , 1 );
    layout->addWidget(btn2, 0 , 0,3,1 );
    layout->addWidget(btn3, 2,1 );
    setLayout(layout);
}

Widget::~Widget()
{
}


在这里插入图片描述这就是栅格布局的一些简单代码,多次尝试就知道函数到底是什么意思了。

命令按钮组 buttons

在这里插入图片描述
push button:命令按钮
Tool button: 工具按钮
radio button:单选按钮
check button:复选按钮
command link button :命令链接按钮(点击下按钮,可以打开一个http的网站)
dialog button box:按钮盒

下面用示例代码一个个显示下他们的用法,首先是push button ,我们来做两个按钮切换窗口背景颜色

push button

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QPushButton>

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow(QWidget *parent = nullptr);
    ~MainWindow();

private:
    QPushButton *btn1;
    QPushButton *btn2;
private slots:
    void click_btn1();
    void click_btn2();
};
#endif // MAINWINDOW_H

#include "mainwindow.h"

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
{
    this->setGeometry(500,500, 800,500);
    btn1 = new QPushButton("btn1" , this);

    btn2 = new QPushButton("btn2" , this);
    btn1->setGeometry(20,20,150,50);
    btn2->setGeometry(20,90,150,50);
    connect(btn1 , &QPushButton::clicked , this , &MainWindow::click_btn1) ;
    connect(btn2 , &QPushButton::clicked , this , &MainWindow::click_btn2) ;
}

MainWindow::~MainWindow()
{
}

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

点击按钮能够出现黄色白色相互切换的效果。

Tool button

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QToolBar>
#include <QToolButton>

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow(QWidget *parent = nullptr);
    ~MainWindow();

private:
    QToolBar *tbar;
    QToolButton *tool_btn;

};
#endif // MAINWINDOW_H

#include "mainwindow.h"
#include <QApplication>
#include <QStyle>

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
{
    this->setGeometry(500,500, 500,300);
    tbar = new QToolBar(this);
    tbar->setGeometry(20,20 ,200, 90);

    QStyle *sty = QApplication::style();
    QIcon ico = sty->standardIcon(QStyle::SP_TitleBarContextHelpButton);
    tool_btn = new QToolButton(this);
    tool_btn->setText("帮助");
    tool_btn->setIcon(ico);
    tbar->addWidget(tool_btn);
}

MainWindow::~MainWindow()
{
}

在这里插入图片描述

Radio Button

单选按钮

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QRadioButton>

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow(QWidget *parent = nullptr);
    ~MainWindow();

private:
     QRadioButton *rbtn1;
     QRadioButton *rbtn2;

};
#endif // MAINWINDOW_H

#include "mainwindow.h"
#include <QApplication>
#include <QStyle>

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

    rbtn1 = new QRadioButton(this);
    rbtn2 = new QRadioButton(this);

    rbtn1->setGeometry(20,20 , 150 ,40);
    rbtn2->setGeometry(20,80 , 150 ,40);

    rbtn1->setText("按钮1");
    rbtn2->setText("按钮2");

    rbtn1->setChecked(true);
    rbtn2->setChecked(false);
}

MainWindow::~MainWindow()
{
}

在这里插入图片描述

check box 复选框

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QRadioButton>
#include <QCheckBox>

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow(QWidget *parent = nullptr);
    ~MainWindow();

private:
     QCheckBox *rbtn1;
     QCheckBox *rbtn2;

};
#endif // MAINWINDOW_H

#include "mainwindow.h"
#include <QApplication>
#include <QStyle>

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

    rbtn1 = new QCheckBox(this);
    rbtn2 = new QCheckBox(this);

    rbtn1->setGeometry(20,20 , 150 ,40);
    rbtn2->setGeometry(20,80 , 150 ,40);

    rbtn1->setText("按钮1");
    rbtn2->setText("按钮2");

    rbtn1->setChecked(true);
    rbtn2->setChecked(true);
}

MainWindow::~MainWindow()
{
}

在这里插入图片描述

commond link button

点击一个按钮打开百度,这里需要导入桌面程序QDesktopServices 与QURL

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QRadioButton>
#include <QCheckBox>
#include <QCommandLinkButton>

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow(QWidget *parent = nullptr);
    ~MainWindow();

private:
     QCommandLinkButton *clb;

private slots:
     //声明槽函数 使用鼠标点击clb之后触发
     void clbClicked();

};
#endif // MAINWINDOW_H

#include "mainwindow.h"
#include <QApplication>
#include <QStyle>
#include <QDesktopServices> //引入桌面服务
#include <QUrl> //引入url

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

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

    connect(clb,&QCommandLinkButton::clicked , this , &MainWindow::clbClicked);
}

MainWindow::~MainWindow()
{
}

void MainWindow::clbClicked(){
    QUrl url ;
    url.setUrl("https://www.baidu.com/");
    QDesktopServices::openUrl(url);
}

button box 按钮盒

QDialogButtonBox是一个放置按钮的盒子,它允许用户添加按钮,并自动按照当前的桌面环境来选择合适的布局。最后个就不写代码了 ,大家可以试着跟着文档小小探索下