一、QT程序开发流程
1、申请必要部件
2、将部件构造出来
3、必要的布局
4、前后台关联
5、美化
二、常见控件(仅部分常用的)
1、按钮类
1、qpushbutton 普通按钮
2、qtoolbutton 工具按钮(一般用于图形显示)
3、qradiobutton 单选按钮(多个按钮时,只有一个被选择)
4、qcheckbox 复选框(多个按钮,可以同时选)
5、qcommandlinkbutoon 命令连接按钮
widget.cpp
#include "widget.h"
#include<QVBoxLayout>
#include<QDebug>
Widget::Widget(QWidget *parent)
: QWidget(parent)
{
bt_button = new QPushButton("普通按钮");
bt_tool = new QToolButton;
bt_tool->setText("工具按钮");
bt_radio = new QRadioButton("单选按钮");
bt_radio1 = new QRadioButton("单选按钮1");
bt_check = new QCheckBox("复选框");
bt_check1 = new QCheckBox("复选框1");
bt_cmd = new QCommandLinkButton("百度");
bt_cmd->setDescription("www.baidu.com");
//应用
le = new QLineEdit;
le->setEchoMode(QLineEdit::Password);
ck = new QCheckBox("显示密码");
QVBoxLayout *vbox = new QVBoxLayout;
vbox->addWidget(bt_button);
vbox->addWidget(bt_tool);
vbox->addWidget(bt_radio);
vbox->addWidget(bt_radio1);
vbox->addWidget(bt_check);
vbox->addWidget(bt_check1);
vbox->addWidget(bt_cmd);
vbox->addWidget(le);
vbox->addWidget(ck);
setLayout(vbox);
//connect(bt_button,SIGNAL(clicked(bool)),this,SLOT(xx(bool)));
//connect(bt_radio,SIGNAL(toggled(bool)),this,SLOT(xx(bool)));
connect(bt_check,SIGNAL(toggled(bool)),this,SLOT(xx(bool)));
connect(ck,SIGNAL(toggled(bool)),this,SLOT(showpass(bool)));
}
void Widget::showpass(bool x)
{
if(!x)
le->setEchoMode(QLineEdit::Password);
else
le->setEchoMode(QLineEdit::Normal);
}
void Widget::xx(bool x)
{
qDebug() << x;
}
Widget::~Widget()
{
};
widget.h
#include <QWidget>
#include<QPushButton>
#include<QToolButton>
#include<QRadioButton>
#include<QCheckBox>
#include<QCommandLinkButton>
#include<QLineEdit>
class Widget : public QWidget
{
Q_OBJECT
public slots:
void xx(bool x);
void showpass(bool);
public:
Widget(QWidget *parent = 0);
~Widget();
private:
QPushButton *bt_button;//普通按钮
QToolButton *bt_tool; //工具按钮
QRadioButton *bt_radio; //单选按钮
QRadioButton *bt_radio1; //单选按钮1
QCheckBox *bt_check; //复选按钮
QCheckBox *bt_check1; //复选按钮1
QCommandLinkButton *bt_cmd; //命令按钮
QLineEdit *le;
QCheckBox *ck;
};
2、布局类
垂直布局 :QVBoxLayout
水平布局: QHBoxLayout
网格布局: QHBoxLayout
#include "widget.h"
#include <QVBoxLayout>
Widget::Widget(QWidget *parent)
: QWidget(parent)
{
//构造需要的控件
bt = new QPushButton("1");
bt1 = new QPushButton("2");
le = new QLineEdit;
le->setAlignment(Qt::AlignRight);
#if 0
//垂直布局
QVBoxLayout *vbox = new QVBoxLayout; //构造一个布局管理器
vbox->addWidget(le); //将需要布局的控件加入布局管理器
vbox->addWidget(bt);
this->setLayout(vbox); //将布局管理器贴在当前界面
#endif
#if 0
//水平布局
QHBoxLayout *vbox = new QHBoxLayout; //构造一个布局管理器
vbox->addWidget(le); //将需要布局的控件加入布局管理器
vbox->addWidget(bt);
this->setLayout(vbox); //将布局管理器贴在当前界面
#endif
#if 0
//网格布局
QGridLayout *vbox = new QGridLayout; //构造一个布局管理器
vbox->addWidget(le, 0, 0, 1, 2); //将需要布局的控件加入布局管理器
vbox->addWidget(bt, 1, 1);
this->setLayout(vbox); //将布局管理器贴在当前界面
#endif
3、输出类
1、 qlabel:标签,(文本、图片、动画)
2、 qtextbrowser(文本浏览器),支持html文件
3、QCalendarWidget 日历窗口
4、QLCDNumber 七段数码管
5、QProgressBar 进度条
6、qtexttospech
widget.h
#include <QWidget>
#include <QLabel>
#include <QTextBrowser>
#include <QCalendarWidget>
#include <QDate>
#include <QLCDNumber>
#include <QProgressBar>
class Widget : public QWidget
{
Q_OBJECT
public slots:
void showDate(QDate);
void update_value(void);
public:
Widget(QWidget *parent = 0);
~Widget();
private:
QLabel *lb_text; //文本标签
QLabel *lb_pix; //图片标签
QLabel *lb_gif; //动画标签
QTextBrowser *tbrowser;
QCalendarWidget *caw;
QLCDNumber *lcd;
QProgressBar *pbr;
};
widget.cpp
在这里插入代码片
```#include "widget.h"
#include <QVBoxLayout>
#include <QMovie>
#include <QTimer>
Widget::Widget(QWidget *parent)
: QWidget(parent)
{
/*标签*/
lb_text = new QLabel("标签测试");
lb_text->setAlignment(Qt::AlignCenter);
lb_pix = new QLabel("我是图片");
lb_pix->setMinimumSize(10, 10);
lb_pix->setScaledContents(true); //自动缩放显示
lb_pix->setPixmap(QPixmap("C:\\Users\\ThinkPad T490\\Desktop\\220501\\1.bmp"));
lb_gif = new QLabel("我是动画");
QMovie *m = new QMovie("C:\\Users\\ThinkPad T490\\Desktop\\220501\\1.gif");
lb_gif->setMovie(m);
m->start();
/*文本浏览器(html)*/
tbrowser = new QTextBrowser;
tbrowser->setText("<!DOCTYPE html>\
<html>\
<head>\
<meta charset=\"utf-8\">\
<title>runoob.com</title>\
</head>\
<body>\
<h1 >AAAAAAAA</h1>\
<p style=\"background-color:rgb(255,0,0)\">BBBBBBBBB</p>\
</body>\
</html>");
/*日历窗口*/
caw = new QCalendarWidget;
/*七段数码管*/
lcd = new QLCDNumber;
lcd->setMinimumHeight(50);
lcd->display(250); //显示数字
/*进度条*/
pbr = new QProgressBar;
pbr->setValue(60);
QVBoxLayout *vbox = new QVBoxLayout;
vbox->addWidget(pbr);
vbox->addWidget(lcd);
vbox->addWidget(caw);
vbox->addWidget(tbrowser);
vbox->addWidget(lb_text);
vbox->addWidget(lb_pix);
vbox->addWidget(lb_gif);
setLayout(vbox);
connect(caw, SIGNAL(clicked(QDate)), this, SLOT(showDate(QDate)));
QTimer *t = new QTimer;
connect(t, SIGNAL(timeout()), this, SLOT(update_value()));
t->start(100);
}
void Widget::update_value(void)
{
static int data = 0;
lcd->display(data);
pbr->setValue(data);
data++;
if(data == 100)
data = 0;
}
void Widget::showDate(QDate d)
{
lb_text->setText(d.toString());
}
Widget::~Widget()
{
}
4、输入类
1、QComboBox : 组合框 (下拉框)
addItem(” wdwe“) 添加选项
2、qfontcombox:字体下拉框
3、qlineedit: 行编辑框
setPlaceholderText(”用户名“) 添加底行注释
4、qtextedit: 文本编辑框
5、qspinbox :自选框
setMaximum(20); 最大能到20
setSingleStep(10);设置单步跨度10
6、qtimeedit :时间编辑框
7、qdial:旋钮
setRange(0, 1000);setRange(0, 1000);设置调节范围
8、qscrollbar:滚动条
setRange(0, 1000);setRange(0, 1000); 设置调节范围
setOrientation(Qt::Horizontal); 显示方案“水平”
9、qslider :滑动条
setRange(0, 1000);setRange(0, 1000);设置调节范围
setOrientation(Qt::Horizontal);显示方案“水平”
widget.h
#include <QWidget>
#include <QComboBox>
#include <QDebug>
#include <QLabel>
#include <QFontComboBox>
#include <QTextEdit>
#include <QLineEdit>
#include <QSpinBox>
#include <QLCDNumber>
#include <QTimeEdit>
#include <QTime>
#include <QDial>
#include <QScrollBar>
#include <QSlider>
class Widget : public QWidget
{
Q_OBJECT
public slots:
void show_int(int );
void show_str(QString);
void show_pic(QString);
void show_time(QTime);
void te_to_lb();
public:
Widget(QWidget *parent = 0);
~Widget();
private:
QComboBox *cmb;
QFontComboBox *fcmb;
QTextEdit *te;
QLineEdit *le;
QSpinBox *sb;
QTimeEdit *timee;
QDial *dl;
QScrollBar *slb;
QSlider *sd;
//调试用
QLabel *lb;
QLCDNumber *lcd;
};
widget.cpp
#include "widget.h"
#include <QVBoxLayout>
#include <QFont>
Widget::Widget(QWidget *parent)
: QWidget(parent)
{
lb = new QLabel("你好");
lcd = new QLCDNumber;
lcd->setMinimumHeight(50);
lcd->setDigitCount(10); //设置显示数据位数
/*组合框、下拉框*/
cmb = new QComboBox; //构造组合框
cmb->addItem("C:\\Users\\ThinkPad T490\\Desktop\\220501\\1.bmp");
cmb->addItem("C:\\Users\\ThinkPad T490\\Desktop\\220501\\pc.bmp");
cmb->addItem("C:\\Users\\ThinkPad T490\\Desktop\\220501\\x.jpg");
connect(cmb, SIGNAL(activated(int)), this, SLOT(show_int(int)));
connect(cmb, SIGNAL(activated(QString)), this, SLOT(show_str(QString)));
connect(cmb, SIGNAL(activated(QString)), lb, SLOT(setText(QString)));
//connect(cmb, &QComboBox::activated, [&](int i) { lb->setPixmap(QPixmap(cmb->itemText(i)));});
connect(cmb, SIGNAL(activated(QString)), this, SLOT(show_pic(QString)));
/*字体下拉框*/
fcmb = new QFontComboBox;
connect(fcmb, &QFontComboBox::currentFontChanged, [&](QFont f){ lb->setFont(f);});
/*行编辑框*/
le = new QLineEdit;
le->setPlaceholderText("用户名");
/*文本编辑框*/
te = new QTextEdit;
connect(te, SIGNAL(textChanged()), this, SLOT(te_to_lb()));
/*自旋框*/
sb = new QSpinBox;
sb->setMaximum(20); //最大只能为20
sb->setSingleStep(10); //设置单步跨度
connect(sb, SIGNAL(valueChanged(int)), lcd, SLOT(display(int)));
/*时间编辑框*/
timee = new QTimeEdit;
connect(timee, SIGNAL(timeChanged(QTime)), this, SLOT(show_time(QTime)));
/*旋钮*/
dl = new QDial;
dl->setRange(0, 1000); //设置调节范围
connect(dl, SIGNAL(valueChanged(int)), lcd, SLOT(display(int)));
/*滚动条*/
slb = new QScrollBar;
slb->setRange(0, 1000); //设置调节范围
slb->setOrientation(Qt::Horizontal); //显示方案“水平”
connect(slb, SIGNAL(valueChanged(int)), lcd, SLOT(display(int)));
/*滑动杆儿*/
sd = new QSlider;
sd->setRange(0, 1000); //设置调节范围
sd->setOrientation(Qt::Horizontal); //显示方案“水平”
connect(sd, SIGNAL(valueChanged(int)), lcd, SLOT(display(int)));
QVBoxLayout *vbox = new QVBoxLayout;
vbox->addWidget(lb);
vbox->addWidget(lcd);
vbox->addWidget(le);
vbox->addWidget(cmb);
vbox->addWidget(fcmb);
vbox->addWidget(te);
vbox->addWidget(sb);
vbox->addWidget(timee);
vbox->addWidget(dl);
vbox->addWidget(slb);
vbox->addWidget(sd);
setLayout(vbox);
}
void Widget::show_time(QTime t)
{
lcd->display(t.toString());
}
void Widget::te_to_lb()
{
lb->setText(te->toPlainText());
}
void Widget::show_pic(QString path)
{
lb->setPixmap(QPixmap(path));
}
void Widget::show_int(int data)
{
qDebug() << data;
}
void Widget::show_str(QString str)
{
qDebug() << str;
}
Widget::~Widget()
{
}
5、容器类
1、QGroupBox:分组框(带边框和注释的容器)
2、QWidget :空白框//无边框显示的容器
3、QScrollArea:滚动区域(带滚动条,可以实现小区域展示大的内容范围)
setWidget()
4、QToolBox:工具箱容器(可折叠)
addItem(t1, “aaaaa”); //将文本编辑框装入工具箱
5、QTabWidget:制表容器
setTabsClosable(true);//显示关闭的按钮
addTab(t1, “aaaa”); //插入一个新标签
6、QStackedWidget:栈式容器(多个页面重叠再一起)
addWidget(t1)
这里容器比较多,代码就不一一声明了