QT入门与基础控件

目录

一、QT入门

1.1QT简介

1.2经典应用

1.3工程搭建

1.3.1按钮 

1.3.2行编辑框

1.3.3简单确定位置

1.4信号与槽机制

二、布局管理器

2.1布局管理器

2.2输出控件

2.3输入控件

2.4按钮

2.5容器

2.5.1Group Box 

2.5.2Ccroll Area

2.5.3Tool Box

2.5.4 Tab Widget

2.5.5Stacked Widget

三、实现一个计算器


一、QT入门

1.1QT简介

QT是挪威Trolltech开发的多平台C++图形用户界面应用程序框架。

 它跑起来要求很低只要有Linux库就能跑起来

1.2经典应用

之前讲C++时就说过这个

1.3工程搭建

新建工程ctrl+N或者点击文件新建

 

名字随便,路径不能有中文,设置默认路径就下次直接存这里不设置就选一下,怎么设置都行

下一步

 

选择平台,展示没有别的可选项

 

这有三个选项:

mainwindows:大一些的项目

widget:中等大小

dialog:很小,就像某个软件打开一个选项不选完不能点别的那种

这里我们选择中等的就行,下面这个勾勾我们不勾

下面这个选项勾上以后可以拖拽设置界面

然后完成,现在只有一个框架我们运行一下

1.3.1按钮 

 

 我们只需要加上头文件,创建一个按键对象,就可以让这个小窗口多一个OK键。

 

1.3.2行编辑框

 

 

 

1.3.3简单确定位置

 

1.4信号与槽机制

 为了方便开发QT引入了信号与槽机制,升级了一下C++的语法。

 

 现在的OK键按下删除,我们想在加一个行编辑器,实现按下下面行编辑器的内容输入到上面。

这时候直接绑定按键就不行了我们需要设计一个槽函数

 

 

 

二、布局管理器

2.1布局管理器

 

新建一个工程

#include "widget.h"
#include <QVBoxLayout>
Widget::Widget(QWidget *parent)
    : QWidget(parent)
{
    le = new QLineEdit(this);
    le1 = new QLineEdit(this);
    pb = new QPushButton("OK", this);

    QVBoxLayout *vbox = new QVBoxLayout;
    vbox->addWidget(le);
    vbox->addWidget(le1);
    vbox->addWidget(pb);

    this->setLayout(vbox);
}

Widget::~Widget()
{

}

 

#include "widget.h"
#include <QVBoxLayout>
#include <QHBoxLayout>
Widget::Widget(QWidget *parent)
    : QWidget(parent)
{
    le = new QLineEdit(this);
    le1 = new QLineEdit(this);
    pb = new QPushButton("OK", this);
#if 0
    QVBoxLayout *vbox = new QVBoxLayout;
    vbox->addWidget(le);
    vbox->addWidget(le1);
    vbox->addWidget(pb);

    this->setLayout(vbox);
#endif
    QHBoxLayout *hbox = new QHBoxLayout;
    hbox->addWidget(le);
    hbox->addWidget(le1);
    hbox->addWidget(pb);

    this->setLayout(hbox);
}

Widget::~Widget()
{

}

 

#include "widget.h"
#include <QVBoxLayout>
#include <QHBoxLayout>
#include <QGridLayout>
Widget::Widget(QWidget *parent)
    : QWidget(parent)
{
    le = new QLineEdit(this);
    le1 = new QLineEdit(this);
    pb = new QPushButton("OK", this);

#if 0
    QVBoxLayout *vbox = new QVBoxLayout;
    vbox->addWidget(le);
    vbox->addWidget(le1);
    vbox->addWidget(pb);

    this->setLayout(vbox);
#endif

#if 0
    QHBoxLayout *hbox = new QHBoxLayout;
    hbox->addWidget(le);
    hbox->addWidget(le1);
    hbox->addWidget(pb);

    this->setLayout(hbox);
#endif
#if 1
    QGridLayout *gbox = new QGridLayout;
    gbox->addWidget(le, 0, 0);
    gbox->addWidget(le1, 1, 1);
    gbox->addWidget(pb, 2, 2);
    this->setLayout(gbox);
#endif

}

Widget::~Widget()
{

}

 

#include "widget.h"
#include <QVBoxLayout>
#include <QHBoxLayout>
#include <QGridLayout>
#include <QFormLayout>

Widget::Widget(QWidget *parent)
    : QWidget(parent)
{
    le = new QLineEdit(this);
    le1 = new QLineEdit(this);
    pb = new QPushButton("OK", this);

    QFormLayout *fbox = new QFormLayout;
    fbox->addRow("user", le);
    fbox->addRow("pawd", le1);
    fbox->addRow("", pb);
    this->setLayout(fbox);

#if 0
    QVBoxLayout *vbox = new QVBoxLayout;
    vbox->addWidget(le);
    vbox->addWidget(le1);
    vbox->addWidget(pb);

    this->setLayout(vbox);
#endif

#if 0
    QHBoxLayout *hbox = new QHBoxLayout;
    hbox->addWidget(le);
    hbox->addWidget(le1);
    hbox->addWidget(pb);

    this->setLayout(hbox);
#endif
#if 0
    QGridLayout *gbox = new QGridLayout;
    gbox->addWidget(le, 0, 0);
    gbox->addWidget(le1, 1, 1);
    gbox->addWidget(pb, 2, 2);
    this->setLayout(gbox);
#endif

}

Widget::~Widget()
{

}

 

2.2输出控件

2.3输入控件

 

输入和输出用一个例子演示

当你需要引用一个照片时要把这个照片放到引自目录中

这个带有你工程名的就是,然后我们粘过去就行。

//.h文件
#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>
#include <QLineEdit>
#include <QTextEdit>
#include <QComboBox>
#include <QComboBox>
#include <QTimeEdit>
#include <QDial>
#include <QSlider>
#include <QScrollBar>

#include <QLabel>
#include <QLCDNumber>
#include <QProgressBar>

class Widget : public QWidget
{
    Q_OBJECT

public:
    Widget(QWidget *parent = 0);
    ~Widget();
private:
    //input
    QLineEdit *le;
    QTextEdit *te;
    QComboBox *cb;
    QTimeEdit *timee;
    QDial *dl;
    QSlider *sd;
    QScrollBar *sb;

    //output
    QLabel *lb, *lb1;
    QLCDNumber *lcd;
    QProgressBar *pgb;
};

#endif // WIDGET_H

 

//.c文件
#include "widget.h"
#include <QVBoxLayout>
#include <QHBoxLayout>
Widget::Widget(QWidget *parent)
    : QWidget(parent)
{
    //input
       le = new QLineEdit(this);
       te = new QTextEdit;
       cb = new QComboBox;
       cb->addItem("read");//选项1
       cb->addItem("write");//选项2
       timee = new QTimeEdit;
       dl = new QDial;
       sd = new QSlider;
       sd->setOrientation(Qt::Horizontal);//水平方向
       sb = new QScrollBar;
       sb->setOrientation(Qt::Horizontal);//水平方向
       QVBoxLayout *vbox = new QVBoxLayout;
       vbox->addWidget(le);
       vbox->addWidget(te);
       vbox->addWidget(cb);
       vbox->addWidget(timee);
       vbox->addWidget(dl);
       vbox->addWidget(sd);
       vbox->addWidget(sb);

       //output
       lb = new QLabel("hello");
       lb1 = new QLabel;
       QPixmap pix("1.png");
       lb1->setFixedSize(100, 100);//设置大小
       /*经过我的验证这个自适应大小不是照片是我们的窗口*/
       /*就是照片是100X100窗口随照片变*/
       lb1->setScaledContents(true);//自适应大小
       lb1->setPixmap( pix );
       lcd = new QLCDNumber;
       pgb = new QProgressBar;
       QVBoxLayout *vbox1 = new QVBoxLayout;
       vbox1->addWidget(lb);
       vbox1->addWidget(lb1);
       vbox1->addWidget(lcd);
       vbox1->addWidget(pgb);

       QHBoxLayout *hbox = new QHBoxLayout;
       hbox->addLayout(vbox);
       hbox->addLayout(vbox1);
       this->setLayout(hbox);

       connect(dl, SIGNAL(valueChanged(int)), lcd, SLOT(display(int)));
       connect(dl, SIGNAL(valueChanged(int)), pgb, SLOT(setValue(int)));
}

Widget::~Widget()
{

}

 暂时不需要设置主函数,默认就行效果就是下面这个样子。

 

2.4按钮

 

//.h文件
#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>
#include <QLineEdit>
#include <QCheckBox>
#include <QPushButton>

class Widget : public QWidget
{
    Q_OBJECT
public slots:
    void setpass(bool flag)
    {
        if(!flag)
            le->setEchoMode(QLineEdit::Password);//显示密码
        else
            le->setEchoMode(QLineEdit::Normal);//不显示密码
    }
public:
    Widget(QWidget *parent = 0);
    ~Widget();
private:
    QLineEdit *le;
    QCheckBox *ck;
    QPushButton *pb;
};

#endif // WIDGET_H
#include "widget.h"
#include <QVBoxLayout>

Widget::Widget(QWidget *parent)
    : QWidget(parent)
{
    le = new QLineEdit;
//    le->setEchoMode(QLineEdit::Password);
    ck = new QCheckBox("show passwd");
    pb = new QPushButton("clear");

    QVBoxLayout *vbox = new QVBoxLayout;
    vbox->addWidget(le);
    vbox->addWidget(ck);
    vbox->addWidget(pb);
    this->setLayout(vbox);

    connect(pb, SIGNAL(clicked(bool)), le, SLOT(clear()));
    connect(ck, SIGNAL(clicked(bool)), this, SLOT(setpass(bool)));
}

Widget::~Widget()
{

}

具体效果如下:实现了一个可以清除和选择是否明文的密码框

 

 

2.5容器

2.5.1Group Box 

#include "widget.h"
#include <QVBoxLayout>

Widget::Widget(QWidget *parent)
    : QWidget(parent)
{
    gb = new QGroupBox("choice", this);

    r1 = new QRadioButton("aaaa");
    r2 = new QRadioButton("bbbb");
    r3 = new QRadioButton("cccc");

    QVBoxLayout *vbox = new QVBoxLayout;
    vbox->addWidget(r1);
    vbox->addWidget(r2);
    vbox->addWidget(r3);

    gb->setLayout(vbox);

    QVBoxLayout *mainbox = new QVBoxLayout;
    mainbox->addWidget(gb);
    this->setLayout(mainbox);
}

Widget::~Widget()
{

}

 

2.5.2Ccroll Area

#include "widget.h"
#include <QVBoxLayout>
Widget::Widget(QWidget *parent)
    : QWidget(parent)
{
    lb = new QLabel(this);
    QPixmap pix("1.png");
    lb->setPixmap(pix);

    sa = new QScrollArea(this);
    sa->setWidget(lb);

    QVBoxLayout *mainbox = new QVBoxLayout;
    mainbox->addWidget(sa);
    this->setLayout(mainbox);
}

Widget::~Widget()
{

}

2.5.3Tool Box

#include "widget.h"
#include <QVBoxLayout>

Widget::Widget(QWidget *parent)
    : QWidget(parent)
{
    tb = new QToolBox;

    pb[0] = new QPushButton("aaa");
    pb[1] = new QPushButton("bbb");
    pb[2] = new QPushButton("ccc");

    tb->addItem(pb[0], "11111");
    tb->addItem(pb[1], "22222");
    tb->addItem(pb[2], "33333");

    QVBoxLayout *mainbox = new QVBoxLayout;
    mainbox->addWidget(tb);
    this->setLayout(mainbox);
}

Widget::~Widget()
{

}

这个Tool Box就像微信、QQ联系人分组那种

2.5.4 Tab Widget

 

 

#include "widget.h"
#include <QVBoxLayout>

Widget::Widget(QWidget *parent)
    : QWidget(parent)
{
    tw = new QTabWidget;

    te1 = new QTextEdit("11111111");
    te2 = new QTextEdit("112221111");
    te3 = new QTextEdit("11113333");

    tw->addTab(te1, "1.c");
    tw->addTab(te2, "2.c");
    tw->addTab(te3, "3.c");

    QVBoxLayout *mainbox = new QVBoxLayout;
    mainbox->addWidget(tw);
    this->setLayout(mainbox);
}

Widget::~Widget()
{

}

 

2.5.5Stacked Widget

 

#include "widget.h"
#include <QVBoxLayout>

Widget::Widget(QWidget *parent)
    : QWidget(parent)
{
    sw = new QStackedWidget;

    te1 = new QTextEdit("aaaa");
    te2 = new QTextEdit("aaadsfasdfasdfa");
    te3 = new QTextEdit("aaasdfaaa");

    sw->addWidget(te1);
    sw->addWidget(te2);
    sw->addWidget(te3);

    cb = new QComboBox;
    cb->addItem("1111");
    cb->addItem("2222");
    cb->addItem("3333");

    QVBoxLayout *mainbox = new QVBoxLayout;
    mainbox->addWidget(sw);
    mainbox->addWidget(cb);
    this->setLayout(mainbox);

    connect(cb, SIGNAL(activated(int)), sw, SLOT(setCurrentIndex(int)));
}

Widget::~Widget()
{

}

三、实现一个计算器

我这道行太浅了,大部分都得和老师学习一下。

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>
#include <QLineEdit>
#include <QPushButton>

class Widget : public QWidget
{
    Q_OBJECT
public slots:
    /*实现尾部字母的删除*/
    void chop_onedata();
    /*将数字键捕获*/
    void num_bt_pushed();
    /*将运算符键捕获*/
    void op_bt_pushed();
    /*将计算键捕获*/
    void calc_bt_pushed();
public:
    Widget(QWidget *parent = 0);
    ~Widget();
private:
    QLineEdit *in, *out;
    QPushButton *p1, *p2, *p3, *p4, *p5, *p6, *p7,*p8;
    //11-15加减乘除等于
    QPushButton *p0, *p9, *p11, *p12, *p13, *p14, *p15;
    QString op;
    int data1;
    int data2;
    int sum;
};

#endif // WIDGET_H
#include "widget.h"
#include <QVBoxLayout>
#include <QHBoxLayout>
Widget::Widget(QWidget *parent)
    : QWidget(parent)
{
    //in = new QLineEdit(this);
    out = new QLineEdit(this);
    p1 = new QPushButton("1",this);
    p2 = new QPushButton("2",this);
    p3 = new QPushButton("3",this);
    p4 = new QPushButton("4",this);
    p5 = new QPushButton("5",this);
    p6 = new QPushButton("6",this);
    p7 = new QPushButton("7",this);
    p8 = new QPushButton("8",this);
    p9 = new QPushButton("9",this);
    p0 = new QPushButton("0",this);
    p11 = new QPushButton("+",this);
    p12 = new QPushButton("-",this);
    p13 = new QPushButton("X",this);
    p14 = new QPushButton("/",this);
    p15 = new QPushButton("=",this);

    QVBoxLayout *vbox = new QVBoxLayout;
    QHBoxLayout *hbox1 = new QHBoxLayout;
    QHBoxLayout *hbox2 = new QHBoxLayout;
    QHBoxLayout *hbox3 = new QHBoxLayout;

    hbox1->addWidget(p0);
    hbox1->addWidget(p1);
    hbox1->addWidget(p2);
    hbox1->addWidget(p3);
    hbox1->addWidget(p4);

    hbox2->addWidget(p5);
    hbox2->addWidget(p6);
    hbox2->addWidget(p7);
    hbox2->addWidget(p8);
    hbox2->addWidget(p9);

    hbox3->addWidget(p11);
    hbox3->addWidget(p12);
    hbox3->addWidget(p13);
    hbox3->addWidget(p14);
    hbox3->addWidget(p15);

    //vbox->addWidget(in);
    vbox->addWidget(out);
    vbox->addLayout(hbox1);
    vbox->addLayout(hbox2);
    vbox->addLayout(hbox3);

    this->setLayout(vbox);
    connect(p0, SIGNAL(clicked(bool)), this, SLOT(num_bt_pushed()));
    connect(p1, SIGNAL(clicked(bool)), this, SLOT(num_bt_pushed()));
    connect(p2, SIGNAL(clicked(bool)), this, SLOT(num_bt_pushed()));
    connect(p3, SIGNAL(clicked(bool)), this, SLOT(num_bt_pushed()));
    connect(p4, SIGNAL(clicked(bool)), this, SLOT(num_bt_pushed()));
    connect(p5, SIGNAL(clicked(bool)), this, SLOT(num_bt_pushed()));
    connect(p6, SIGNAL(clicked(bool)), this, SLOT(num_bt_pushed()));
    connect(p7, SIGNAL(clicked(bool)), this, SLOT(num_bt_pushed()));
    connect(p8, SIGNAL(clicked(bool)), this, SLOT(num_bt_pushed()));
    connect(p9, SIGNAL(clicked(bool)), this, SLOT(num_bt_pushed()));

    connect(p11, SIGNAL(clicked(bool)), this, SLOT(op_bt_pushed()));
    connect(p12, SIGNAL(clicked(bool)), this, SLOT(op_bt_pushed()));
    connect(p13, SIGNAL(clicked(bool)), this, SLOT(op_bt_pushed()));
    connect(p14, SIGNAL(clicked(bool)), this, SLOT(op_bt_pushed()));

    connect(p15, SIGNAL(clicked(bool)), this, SLOT(calc_bt_pushed()));

}
/*将运算符键捕获*/
void Widget::op_bt_pushed()
{
    //1.提取按键
    QPushButton *btx = static_cast<QPushButton *>(sender());
    //2.提取文字
    op = btx->text();
    //3.保存数据1
    data1 = out->text().toInt();
    //4.清除输入框
    out->clear();
}
/*将计算键捕获*/
void Widget::calc_bt_pushed()
{
    //1.提取第二操作数
    data2 = out->text().toInt();
    //2.运算
    switch(op.toStdString().c_str()[0])
    {
    case '+': sum = data1+data2; break;
    case '-': sum = data1-data2; break;
    case '*': sum = data1*data2; break;
    case '/': sum = data1/data2; break;
    }
    //3.显示结果
    out->setText(QString::number(sum));
}

void Widget::num_bt_pushed()
{
    //1.提取按键
    QPushButton *btx = static_cast<QPushButton *>(sender());
    //2.提取文字
    QString c = btx->text();
    //3.追加显示在编辑框
    QString data = out->text();
    out->setText(data+c);
}

void Widget::chop_onedata()
{
    //1.提取文字
    QString data = out->text();
    //2.将尾部删除
    data.chop(1);
    //3.放回去
    out->setText(data);
}
Widget::~Widget()
{

}

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

宇努力学习

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值