QT基础第二天(2)qt基础部件:按钮类,布局类,输出类,输入类,容器等个别举例

前面我们说了qt程序的基本开发流程

1. 申明必要的部件

2. 将部件构造出来

3. 必要的布局

4. 前后台关联

5. 美化

今天我们接着来说一说qt的基础部件

一.按钮类

QT基础第二天(2)qt基础部件:按钮类,布局类,输出类,输入类,容器等个别举例_第1张图片

Push Button :按钮

Tool Button :工具按钮

Radio Button :单选按钮

Check Button :复选框

Command Link Button :命令链接按钮

Dialog Button Box :对话框按钮盒

 例子:

#ifndef WIDGET_H
#define WIDGET_H

#include 
#include 
#include 
#include 
#include 
#include 
#include 

class Widget : public QWidget
{
    Q_OBJECT
public slots:
    void xxx(bool x);
    void showpass(bool);

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

private:
    QPushButton *bt_button; //普通按钮
    QToolButton *bt_tool;   //工具按钮
    QRadioButton *bt_radio; //单选按钮
    QRadioButton *bt_radio1;//单选按钮
    QCheckBox *bt_check;    //复选按钮
    QCheckBox *bt_check1;   //复选按钮
    QCommandLinkButton *bt_cmd;//命令按钮

    QLineEdit *le;
    QCheckBox *ck;
};

#endif // WIDGET_H
#include "widget.h"
#include 
#include 

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(xxx(bool)));
//    connect(bt_radio, SIGNAL(toggled(bool)), this, SLOT(xxx(bool)));
    connect(bt_check, SIGNAL(toggled(bool)), this, SLOT(xxx(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::xxx(bool x)
{
    qDebug() << x;
}

Widget::~Widget()
{

}

 QT基础第二天(2)qt基础部件:按钮类,布局类,输出类,输入类,容器等个别举例_第2张图片

二.布局类

QT基础第二天(2)qt基础部件:按钮类,布局类,输出类,输入类,容器等个别举例_第3张图片

Vertical Layout:垂直布局

Horizontal Layout:水平布局

Grid Layout:网格布局

Form Layout:表单布局

三.输出类

QT基础第二天(2)qt基础部件:按钮类,布局类,输出类,输入类,容器等个别举例_第4张图片

Label:标签

Text Browser:文本浏览器

Graphics View:图形视图

Calendar Widget:日历

LCD Number:液晶数字

Progress Bar:进度条

Horizontal Line:水平线

Vertical Line:垂直线

OpenGL Widget:OpenGL 工具

QQuickWidget:嵌入QML工具

#ifndef WIDGET_H
#define WIDGET_H

#include 
#include 
#include 
#include 
#include 
#include 
#include 

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;
};

#endif // WIDGET_H
#include "widget.h"
#include 
#include 
#include 

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("\
                      \
                      \
                      \
                      runoob.com\
                      \
                      \
                          

AAAAAAAA

\

BBBBBBBBB

\ \ "); /*日历窗口*/ 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() { }

QT基础第二天(2)qt基础部件:按钮类,布局类,输出类,输入类,容器等个别举例_第5张图片
四.输入类

QT基础第二天(2)qt基础部件:按钮类,布局类,输出类,输入类,容器等个别举例_第6张图片

Combo Box:组合框

/*组合框、下拉框*/
    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)));


Font Combo Box:字体组合框

 /*字体下拉框*/
    fcmb = new QFontComboBox;
    connect(fcmb, &QFontComboBox::currentFontChanged, [&](QFont f){ lb->setFont(f);});


Line Edit:行编辑框

 /*行编辑框*/
    le = new QLineEdit;
    le->setPlaceholderText("用户名");


Text Edit:文本编辑框

 /*文本编辑框*/
    te = new QTextEdit;
    connect(te, SIGNAL(textChanged()), this, SLOT(te_to_lb()));


Plain Text Edit:纯文本编辑框
Spin Box:数字显示框(旋转盒)

 /*自旋框*/
    sb = new QSpinBox;
    sb->setMaximum(20); //最大只能为20
    sb->setSingleStep(10); //设置单步跨度
    connect(sb, SIGNAL(valueChanged(int)), lcd, SLOT(display(int)));


Double Spin Box:Double 数字显示框
Time Edit:时间编辑

/*时间编辑框*/
    timee = new QTimeEdit;
    connect(timee, SIGNAL(timeChanged(QTime)), this, SLOT(show_time(QTime)));


Date Edit:日期编辑
Date/Time Edit:日期/时间编辑
Dial:拨号
Horizontal Scroll Bar:水平滚动条
Vertical Scroll Bar:垂直滚动条

 /*滚动条*/
    slb = new QScrollBar;
    slb->setRange(0, 1000); //设置调节范围
    slb->setOrientation(Qt::Horizontal); //显示方案“水平”
    connect(slb, SIGNAL(valueChanged(int)), lcd, SLOT(display(int)));


Horizontal Slider:水平滑块
Vertical Slider:垂直滑块

 /*滑动杆儿*/
    sd = new QSlider;
    sd->setRange(0, 1000); //设置调节范围
    sd->setOrientation(Qt::Horizontal); //显示方案“水平”
    connect(sd, SIGNAL(valueChanged(int)), lcd, SLOT(display(int)));


Key Sequence Edit:按键序列编辑框
五.容器类

QT基础第二天(2)qt基础部件:按钮类,布局类,输出类,输入类,容器等个别举例_第7张图片

Group Box:组框

 lb[0] = new QLabel("题目1 safasfasfasdf");
    rb[0] = new QRadioButton("aaaaa");
    rb[1] = new QRadioButton("bbbbb");
    rb[2] = new QRadioButton("ccccc");

    QVBoxLayout *vbox1 = new QVBoxLayout;
    vbox1->addWidget(lb[0]);
    vbox1->addWidget(rb[0]);
    vbox1->addWidget(rb[1]);
    vbox1->addWidget(rb[2]);

    g1 = new QGroupBox("AAAA");   //带边框显示和注释的容器
    g1->setLayout(vbox1);


Scroll Area:滚动区域
Tool Box:工具箱
Tab Widget:标签部件
Stacked Widget:堆叠部件
Frame:框架
Widget:小部件
MDI Area:MDI区域
Dock Widget:停靠窗体部件
QAxWidget:封装Flash的ActiveX控件
六.空间间隔组

QT基础第二天(2)qt基础部件:按钮类,布局类,输出类,输入类,容器等个别举例_第8张图片

Horizontal Spacer:水平间隔

Vertical Spacer:垂直间隔

七.项目视图组

QT基础第二天(2)qt基础部件:按钮类,布局类,输出类,输入类,容器等个别举例_第9张图片

List View:列表视图

Tree View:树形视图

Table View:表格式图

Column View:列视图

Undo View:撤消视图

八.项目控件组

QT基础第二天(2)qt基础部件:按钮类,布局类,输出类,输入类,容器等个别举例_第10张图片

List Widget:列表控件

Tree Widget:树形控件

Table Widget:表格控件

面向对象的思想:

例子:

qustion.h

#ifndef QUSTIONWIDGET_H
#define QUSTIONWIDGET_H

#include 
#include 
#include 
#include 

class qustionWidget : public QWidget
{
    Q_OBJECT
public:
    qustionWidget(QWidget *parent = nullptr);

public:
    void setquestion(QString str);  //设置题目
    void addAnswer(QString str);    //添加选项

private:
    QLabel *lb;   //显示题目
    //QVector bt;
    QVBoxLayout *vbox; //显示选项的
};

#endif // QUSTIONWIDGET_H

widget.h

#ifndef WIDGET_H
#define WIDGET_H

#include 
#include "qustionwidget.h"

class Widget : public QWidget
{
    Q_OBJECT

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

    qustionWidget *q1;
    qustionWidget *q2;
    qustionWidget *q3;
};

#endif // WIDGET_H

qustiopn.cpp 

#include "qustionwidget.h"

qustionWidget::qustionWidget(QWidget *parent) :
    QWidget(parent)
{
    lb = new QLabel;
    //bt.clear();
    vbox = new QVBoxLayout;
    vbox->addWidget(lb);
    setLayout(vbox);
}

void qustionWidget::setquestion(QString str)
{
    lb->setText(str);
}

void qustionWidget::addAnswer(QString str)
{
    QRadioButton *an = new QRadioButton(str);
    vbox->addWidget(an);
}

 widget.cpp

#include "widget.h"
#include 

Widget::Widget(QWidget *parent)
    : QWidget(parent)
{
    q1 = new qustionWidget;   //题目“控件”
    q1->setquestion("xxxxxxxxxxxxxxxxxxxxxxxxxxx");
    q1->addAnswer("aaaaaaa");
    q1->addAnswer("bbbbbbb");
    q1->addAnswer("ccccccc");
    q1->addAnswer("dddddddddd");

    q2 = new qustionWidget; //题目“控件”
    q2->setquestion("yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy");
    q2->addAnswer("xxxxx");
    q2->addAnswer("yyyyyy");
    q2->addAnswer("zzzzzzzzzzzzz");

    q3 = new qustionWidget; //题目“控件”
    q3->setquestion("yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy");
    q3->addAnswer("xxxxx");
    q3->addAnswer("yyyyyy");
    q3->addAnswer("zzzzzzzzzzzzz");

    QVBoxLayout *vbox = new QVBoxLayout;
    vbox->addWidget(q1);
    vbox->addWidget(q2);
    vbox->addWidget(q3);
    setLayout(vbox);
}

Widget::~Widget()
{

}

效果:

QT基础第二天(2)qt基础部件:按钮类,布局类,输出类,输入类,容器等个别举例_第11张图片

你可能感兴趣的:(qt,开发语言,c++)