qt第三天

来源:互联网 发布:苹果6s有数据快捷键 编辑:程序博客网 时间:2024/04/29 10:13

qq登陆框

启动qtcreator:

tarena$qtcreator

1,新建项目->Qt控件项目->Qt GUI应用
2,输入项目名称、项目保存路径

qt Creator版本的加法器:

  1. 构建界面
    这里写图片描述
  2. 在adder.h的头文件中添加槽函数
#ifndef ADDER_H#define ADDER_H#include <QMainWindow>namespace Ui {class Adder;}class Adder : public QMainWindow{    Q_OBJECTpublic:    explicit Adder(QWidget *parent = 0);    ~Adder();  //自定义槽函数 完成计算public slots:    void getRes();private:    Ui::Adder *ui;};#endif // ADDER_H
  1. app.cpp中实现槽函数并与按钮关联
#include "adder.h"#include "ui_adder.h"Adder::Adder(QWidget *parent) :    QMainWindow(parent),    ui(new Ui::Adder){    ui->setupUi(this);    //给按钮绑定点击事件    connect(ui->btn,SIGNAL(clicked()),this,SLOT(getRes()));}//实现槽函数void Adder::getRes(){    ui->rs->setText(QString::number(                        ui->add->text().toDouble()+                        ui->added->text().toDouble()                        ));}Adder::~Adder(){    delete ui;}

QQ login登陆页面

  • 搭建界面
    这里写图片描述
  • 在qqlogin.h中添加槽函数
#ifndef QQLOGIN_H#define QQLOGIN_H#include <QMainWindow>namespace Ui {class QqLogin;}class QqLogin : public QMainWindow{    Q_OBJECTpublic:    explicit QqLogin(QWidget *parent = 0);    ~QqLogin();    //添加一个槽函数,两个按钮连接同一个槽函数public slots:     void loginAndCancel();private:    Ui::QqLogin *ui;};#endif // QQLOGIN_H
  • 实现槽函数,并且绑定
#include "qqlogin.h"#include "ui_qqlogin.h"QqLogin::QqLogin(QWidget *parent) :    QMainWindow(parent),    ui(new Ui::QqLogin){    ui->setupUi(this);    //将两上按钮同时绑定到一个槽函数    connect(ui->bLogin,SIGNAL(clicked()),this,SLOT(loginAndCancel()));    connect(ui->bCancel,SIGNAL(clicked()),this,SLOT(loginAndCancel()));}//负责登陆和退出void QqLogin::loginAndCancel(){    //通过sender来区分按钮   if(sender() == ui->bCancel){       this->close();   }else if(sender() == ui->bLogin){       if(ui->username->text() == "abc" && ui->password->text() == "123"){           qDebug("login success....");       }else{           qDebug("login fail....");       }   }}QqLogin::~QqLogin(){    delete ui;}

退出的时候,添加一个确认框

#include <QMessageBox>//负责登陆和退出void QqLogin::loginAndCancel(){    //通过sender来区分按钮   if(sender() == ui->bCancel){       QMessageBox msg(this);       msg.setText("are you quit?");       msg.setStandardButtons(                   QMessageBox::Yes|QMessageBox::No                   );       if(msg.exec() == QMessageBox::Yes){//进入事件循环,等到用户交互           this->close();       }   }}

摇奖器的实现:

1.界面实现
这里写图片描述

2,YaoJiang.h头文件

#ifndef YAOJIANG_H#define YAOJIANG_H#include <QDialog>#include <QPaintEvent>#include <QImage>#include <QTimer>namespace Ui {class YaoJiang;}class YaoJiang : public QDialog{    Q_OBJECTpublic:    explicit YaoJiang(QWidget *parent = 0);    ~YaoJiang();    //绘制事件处理函数,当绘制事件发生的时候,就交给这个函数来处理    //其实是一个回调函数,系统调用这个函数来绘制public:    void paintEvent(QPaintEvent *event);private:    Ui::YaoJiang *ui;    //要绘制的图片    QImage img;    //图片编号    int ind;    QTimer *timer;    QString names[6];//人名    bool paintFlag;    //用来绘制的标志的槽函数 public slots:    void changePaintFlag();};#endif // YAOJIANG_H

3.YaoJiang.cpp实现文件

#include "yaojiang.h"#include "ui_yaojiang.h"#include  <QPainter>#include  <QTime>YaoJiang::YaoJiang(QWidget *parent) :    QDialog(parent),    ui(new Ui::YaoJiang){    qsrand(QTime::currentTime().msec());    ui->setupUi(this);    names[0] = "xiaoli66";    names[1] = "xiaoli55";    names[2] = "xiaoli11";    names[3] = "xiaoli22";    names[4] = "xiaoli33";    names[5] = "xiaoli44";    timer=new QTimer(this);    timer->setInterval(200);//0.2刷一下    timer->start();    this->connect(timer,SIGNAL(timeout()),this,SLOT(repaint()));    paintFlag = true;    connect(ui->btnStart,SIGNAL(clicked()),this,SLOT(changePaintFlag()));    connect(ui->btnStop,SIGNAL(clicked()),this,SLOT(changePaintFlag()));}void YaoJiang::changePaintFlag(){    if(sender() == ui->btnStart){        paintFlag = true;    }else if(sender()==ui->btnStop){        paintFlag = false;    }}//回调方法,斜体表示受保护的方法void YaoJiang::paintEvent(QPaintEvent *event){    QPainter   qp(this);    //qp.drawLine(QPointF(100,100),QPointF(300,500));    if(paintFlag == true){        ind = (qrand()%4)+1;        QString imagePath = ":/i";        imagePath = imagePath +QString::number(ind)+".jpg";       // img.load(":/i1.jpg");//:前缀名/文件名        img.load(imagePath);//:前缀名/文件名        img.scaled(320,480);        qp.drawImage(100,100,img);        ui->pName->setText(names[ind-1]);    }else{        qp.drawImage(100,100,img);    }}YaoJiang::~YaoJiang(){    delete ui;}

鼠标事件的处理:
1,在头文件中声明,mousePressEvent为系统函数

    //鼠标事件处理函数public:    void mousePressEvent(QMouseEvent *event);

2,在.cpp文件中实现

void Dialog::mousePressEvent(QMouseEvent *event){    switch (event->buttons()) {    case Qt::LeftButton:        qDebug("left button press....%d==>%d",event->x(),event->y());        break;    case Qt::RightButton:        qDebug("right button press....%d==>%d",event->x(),event->y());        break;    case Qt::MidButton:        qDebug("middle button press...%d==>%d",event->x(),event->y());        break;    default:        break;    }}

键盘事件的处理
1,头文件声明,keyPressEvent为系统函数

#include <QKeyEvent>public:    void keyPressEvent(QKeyEvent *e);

2,实现

void Dialog::keyPressEvent(QKeyEvent *e){    switch (e->key()) {    case Qt::Key_Up:        qDebug("Key_Up press....");        break;    case Qt::Key_Down:        qDebug("Key_Down press....");        break;    case Qt::Key_Left:        qDebug("Key_left press....");        break;    case Qt::Key_Right:        qDebug("Key_right press....");        break;    default:        break;    }}
0 0
原创粉丝点击