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