Qt 基础知识

一、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)

这里容器比较多,代码就不一一声明了

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值