qt第三天

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_OBJECT

public:
    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_OBJECT

public:
    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_OBJECT

public:
    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;
    }
}
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值