基本事件:

鼠标事件

键盘事件

绘制事件

1.QT中的事件:

事件是对各应用程序需要知道的由应用程序内部或外部产生的事情或动作的通称。

QT中事件的处理:

在QT中使用一个对象来表示一个事件,继承自QEvent类

QT把事件定义 为固定的virtual保护函数,这些函数自动被系统调用

鼠标事件:

virtual void mouseDoubleClickEvent(QMouseEvent * event)

virtual void mouseMoveEvent(QMouseEvent * event)

virtual void mousePressEvent(QMouseEvent * event)

virtual void mouseReleaseEvent(QMouseEvent * event)

按下的是哪个键(左键,右键,中键,...)

例:event->button() == Qt::LeftButton

按下时的坐标

例:

int x = event->x();

int y = event->y();

键盘事件:

virtual void keyPressEvent(QKeyEvent * event)

virtual void keyReleaseEvent(QKeyEvent * event)

e->key() == Qt::Key_A//获取单个键

if(e->modifiers() == Qt::ControlModifier)//获取组合键

if(e->key() == Qt::Key_M)

2.定时器与随机数

QTimer

QTimer *timer = new QTimer(this);//创建一个定时器

connect(timer, SIGNAL(timeout()), this, SLOT(update()));//当定时器超时,发出信号timeout()

timer->start(1000)//启动定时器,同时设置超时时间,这里设置为1000毫秒

timer->stop();//停止定时器

srand(time(0));//设置随机数种子,一般参数使用当前系统时间,time(0) rand()%100;//伪随机,随机生成0-99之间的整数

案例:模拟抽奖

思路:

1.打开文件,读取文件内容

2.保存文件内容,比如保存到 QStringList

3.生成一个随机数,随机数的范围 由文件内容的项目数决定

4.以生成的随机数为下标,去List中取相应的内容

5.显示相应的内容。

3.绘制事件

virtual void paintEvent(QPaintEvent * event);

2D绘图

绘图三要素:

画家 QPainter

画笔/刷 QPen/QBrush

画布(绘画设备)

绘制函数: 图形:线,圆,矩形,弧,扇形,多边形...

图像:image,picture,pixmap

字符串:text

作业:

在一个窗体设置属性

在另一个窗体画图形

答案

dialob.h

#ifndef DIALOG_H
#define DIALOG_H

#include <QDialog>

namespace Ui {
class Dialog;
}

class Dialog : public QDialog
{
    Q_OBJECT

public:
    explicit Dialog(QWidget *parent = 0);
    ~Dialog();
    void setPenWidth(int);
    void setPencolor(QString);
    void setPentu(QString);
    void setPenfg(QString);

protected:
    void paintEvent(QPaintEvent *);

private:
    Ui::Dialog *ui;
    int w;
    QString s;
    QString s1;
    QString s2;
};

#endif // DIALOG_H

mainwindom.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include "dialog.h"
namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();

private slots:
    void on_pushButton_clicked();

private:
    Ui::MainWindow *ui;
    Dialog *d;
};

#endif // MAINWINDOW_H

dialog.cpp
#include "dialog.h"
#include "ui_dialog.h"
#include <QPainter>
#include <QString>
Dialog::Dialog(QWidget *parent) :
    QDialog(parent),
    ui(new Ui::Dialog)
{
    ui->setupUi(this);
    this->setFixedSize(400,400);
    this->setWindowTitle("画图界面");
}

Dialog::~Dialog()
{
    delete ui;
}

void Dialog::setPenWidth(int w)
{
    this->w = w;
}

void Dialog::setPencolor(QString s)
{
    this->s = s;
}

void Dialog::setPentu(QString s1)
{
    this->s1 = s1;
}

void Dialog::setPenfg(QString s2)
{
    this->s2 = s2;
}

void Dialog::paintEvent(QPaintEvent *)
{
    QPainter pter(this);
    QPen p;
    if(s=="yellow")
    {
        qDebug("hello");
        p.setColor(Qt::yellow);
    }
    else if(s=="red")
    {
        p.setColor(Qt::red);
    }
    p.setWidth(w);
    if(s2=="SolidLine")
    {
        p.setStyle(Qt::SolidLine);
    }
    else if(s2=="DotLine")
    {
        p.setStyle(Qt::DotLine);
    }
    else if(s2=="DashDotLine")
    {
        p.setStyle(Qt::DashDotLine);
    }
    //SolidLine
    //DashDotLine
    //p.setStyle(Qt::DotLine);
    pter.setPen(p);
    QBrush brush(Qt::blue,Qt::SolidPattern);//设置画刷
    pter.setBrush(brush);
    if(s1=="yuan")
    {
        pter.drawEllipse(QPoint(200,200),100,100);
    }
    else if(s1=="juxing")
    {
        pter.drawRect(100,100,50,80);
    }


}

mainwindow.cpp
#include "mainwindow.h"
#include "ui_mainwindow.h"

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    this->setWindowTitle("属性设置");
    this->setFixedSize(400,400);
    d = new Dialog;
}

MainWindow::~MainWindow()
{
    delete ui;
}

void MainWindow::on_pushButton_clicked()
{
    int w = ui->comboBox->currentText().toInt();
    QString s=ui->comboBox_2->currentText();
    QString s1=ui->comboBox_3->currentText();
    QString s2=ui->comboBox_4->currentText();
    d->setPenWidth(w);
    d->setPencolor(s);
    d->setPentu(s1);
    d->setPenfg(s2);
    d->show();
    d->update();

}

main.cpp
#include "mainwindow.h"
#include <QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWindow w;
    w.show();


    return a.exec();
}

代码二
.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
class QLabel;
namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
Q_OBJECT

public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
protected:
void mousePressEvent(QMouseEvent * event);//鼠标按下事件
void mouseMoveEvent(QMouseEvent * event);//移动事件

private:
Ui::MainWindow *ui;
QLabel *lbl;
QLabel *lbl2;
};

#endif // MAINWINDOW_H

.cpp

#include "dialog.h"
#include "ui_dialog.h"
#include <QPainter>
#include <QString>
Dialog::Dialog(QWidget *parent) :
    QDialog(parent),
    ui(new Ui::Dialog)
{
    ui->setupUi(this);
    this->setFixedSize(400,400);
    this->setWindowTitle("画图界面");
}

Dialog::~Dialog()
{
    delete ui;
}

void Dialog::setPenWidth(int w)
{
    this->w = w;
}

void Dialog::setPencolor(QString s)
{
    this->s = s;
}

void Dialog::setPentu(QString s1)
{
    this->s1 = s1;
}

void Dialog::setPenfg(QString s2)
{
    this->s2 = s2;
}

void Dialog::paintEvent(QPaintEvent *)
{
    QPainter pter(this);
    QPen p;
    if(s=="yellow")
    {
        qDebug("hello");
        p.setColor(Qt::yellow);
    }
    else if(s=="red")
    {
        p.setColor(Qt::red);
    }
    p.setWidth(w);
    if(s2=="SolidLine")
    {
        p.setStyle(Qt::SolidLine);
    }
    else if(s2=="DotLine")
    {
        p.setStyle(Qt::DotLine);
    }
    else if(s2=="DashDotLine")
    {
        p.setStyle(Qt::DashDotLine);
    }
    //SolidLine
    //DashDotLine
    //p.setStyle(Qt::DotLine);
    pter.setPen(p);
    QBrush brush(Qt::blue,Qt::SolidPattern);//设置画刷
    pter.setBrush(brush);
    if(s1=="yuan")
    {
        pter.drawEllipse(QPoint(200,200),100,100);
    }
    else if(s1=="juxing")
    {
        pter.drawRect(100,100,50,80);
    }


}

.cpp
#include "mainwindow.h"
#include "ui_mainwindow.h"

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    this->setWindowTitle("属性设置");
    this->setFixedSize(400,400);
    d = new Dialog;
}

MainWindow::~MainWindow()
{
    delete ui;
}

void MainWindow::on_pushButton_clicked()
{
    int w = ui->comboBox->currentText().toInt();
    QString s=ui->comboBox_2->currentText();
    QString s1=ui->comboBox_3->currentText();
    QString s2=ui->comboBox_4->currentText();
    d->setPenWidth(w);
    d->setPencolor(s);
    d->setPentu(s1);
    d->setPenfg(s2);
    d->show();
    d->update();

}

.cpp
#include "mainwindow.h"
#include <QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWindow w;
    w.show();


    return a.exec();
}

代码三
.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>

namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
Q_OBJECT

public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();

protected:
void keyPressEvent(QKeyEvent *e);

private slots:
void on_pushButton_clicked();

private:
Ui::MainWindow *ui;
};

#endif // MAINWINDOW_H

.cpp

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QKeyEvent>
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
}

MainWindow::~MainWindow()
{
delete ui;
}

void MainWindow::keyPressEvent(QKeyEvent *e)
{
if(e->key() == Qt::Key_A)
{
int x = ui->pushButton->x();
int y = ui->pushButton->y();
ui->pushButton->move(x-10,y);
}
if(e->key() == Qt::Key_D)
{
int x = ui->pushButton->x();
int y = ui->pushButton->y();
ui->pushButton->move(x+10,y);
}

if(e->modifiers() == Qt::ControlModifier)
{
if(e->key() == Qt::Key_M)
{
qDebug("ctrl + m");
this->setWindowState(Qt::WindowFullScreen);
}
if(e->key() == Qt::Key_Q)
{
this->setWindowState(Qt::WindowNoState);
}
}
}

void MainWindow::on_pushButton_clicked()
{

}

.cpp

#include "mainwindow.h"
#include <QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWindow w;
    w.show();


    return a.exec();
}

代码三

.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QTimer>
namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
Q_OBJECT

public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
public slots:
void timeoutSlot();

private slots:
void on_pushButton_clicked();

void on_pushButton_2_clicked();

private:
Ui::MainWindow *ui;
QTimer *timer;
};

#endif // MAINWINDOW_H

.cpp

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QDateTime>
#include <QDebug>
#include <ctime>
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{

ui->setupUi(this);
qsrand(time(0));
timer = new QTimer(this);
connect(timer,SIGNAL(timeout()),this,SLOT(timeoutSlot()));
}

MainWindow::~MainWindow()
{
delete ui;
}

void MainWindow::timeoutSlot()
{
QString curTime = QDateTime::currentDateTime().toString();
ui->label->setText(curTime);
}

void MainWindow::on_pushButton_clicked()
{
timer->start(1000);
int i = qrand()%100;
qDebug() << i;
}

void MainWindow::on_pushButton_2_clicked()
{
timer->stop();
}

.cpp

#include "mainwindow.h"
#include <QApplication>

int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MainWindow w;
w.show();

return a.exec();
}

代码四

.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QPaintEvent>
namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
Q_OBJECT

public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();

protected:
void paintEvent(QPaintEvent * event);

private:
Ui::MainWindow *ui;
};

#endif // MAINWINDOW_H

.cpp

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QDebug>
#include <QPainter>
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
}

MainWindow::~MainWindow()
{
delete ui;
}

void MainWindow::paintEvent(QPaintEvent *event)
{
//1.产生绘图对象
QPainter tang(this);

//2.设置画笔、画刷属性
QPen p;
p.setColor(Qt::red);//设置画笔颜色
p.setWidth(10);//设置笔画宽度
// p.setStyle(Qt::DotLine);//设置画笔风格
tang.setPen(p);//把画笔交给画家
QBrush brush(Qt::blue,Qt::Dense5Pattern);//设置画刷
tang.setBrush(brush);

//3.开始画
// tang.drawLine(0,0,100,100);//画线
tang.drawEllipse(100,100,80,80);//画(椭)圆
// tang.drawRect(50,50,100,80);//画矩形
//tang.drawArc(100,100,100,100,30*16,120*16);//弧
// tang.drawChord(100,100,100,100,30*16,120*16);//弦弧
// tang.drawPie(100,100,100,100,30*16,300*16);//画饼状图(扇形)
// tang.drawPoint(200,200);//画点
// QPointF points[4] = {
// QPointF(10.0, 80.0),
// QPointF(20.0, 10.0),
// QPointF(80.0, 30.0),
// QPointF(90.0, 70.0)
// };
// tang.drawConvexPolygon(points,4);//画多边形

// QPainterPath path;
// path.moveTo(0,200);
// path.lineTo(400,200);
// path.lineTo(100,400);
// path.lineTo(200,0);
// path.lineTo(300,400);
// path.lineTo(0,200);

// tang.drawPath(path);//画路径,比如画五角星

}

.cpp

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QDebug>
#include <QPainter>
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
}

MainWindow::~MainWindow()
{
delete ui;
}

void MainWindow::paintEvent(QPaintEvent *event)
{
//1.产生绘图对象
QPainter tang(this);

//2.设置画笔、画刷属性
QPen p;
p.setColor(Qt::red);//设置画笔颜色
p.setWidth(10);//设置笔画宽度
// p.setStyle(Qt::DotLine);//设置画笔风格
tang.setPen(p);//把画笔交给画家
QBrush brush(Qt::blue,Qt::Dense5Pattern);//设置画刷
tang.setBrush(brush);

//3.开始画
// tang.drawLine(0,0,100,100);//画线
tang.drawEllipse(100,100,80,80);//画(椭)圆
// tang.drawRect(50,50,100,80);//画矩形
//tang.drawArc(100,100,100,100,30*16,120*16);//弧
// tang.drawChord(100,100,100,100,30*16,120*16);//弦弧
// tang.drawPie(100,100,100,100,30*16,300*16);//画饼状图(扇形)
// tang.drawPoint(200,200);//画点
// QPointF points[4] = {
// QPointF(10.0, 80.0),
// QPointF(20.0, 10.0),
// QPointF(80.0, 30.0),
// QPointF(90.0, 70.0)
// };
// tang.drawConvexPolygon(points,4);//画多边形

// QPainterPath path;
// path.moveTo(0,200);
// path.lineTo(400,200);
// path.lineTo(100,400);
// path.lineTo(200,0);
// path.lineTo(300,400);
// path.lineTo(0,200);

// tang.drawPath(path);//画路径,比如画五角星

}

.cpp

#include "mainwindow.h"
#include <QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWindow w;
    w.show();

    return a.exec();
}




												

QT第六天学习的更多相关文章

  1. Qt的学习资料比起其它C/C++的GUI组件来说已经算很全的了

    Qt的学习资料比起其它C/C++的GUI组件来说已经算很全的了.Google的话能解决很多问题,如果没搜到资料的话,如果不是问题太过具体或者奇葩,那就是搜索方法的问题.中文教程中,Qt学习之路系列很不 ...

  2. [转] Qt 多线程学习

    Qt 多线程学习 转自:http://www.cnblogs.com/IT-BOY/p/3544220.html 最近的项目上用到了关于多线程的知识,自己也比较感兴趣,所以就拿了那本<C++ G ...

  3. Qt入门学习——Qt 5 帮助文档的使用

    Qt入门学习——Qt 5 帮助文档的使用 学习图形界面开发,肯定离不开帮助文档的使用,因为它不像 C 语言那样就那么几个函数接口,图形接口的接口可以用海量来形容,常用的我们可能能记住,其它的真的没有必 ...

  4. VUE2 第六天学习--- vue单文件项目构建

    阅读目录 VUE2 第六天学习--- vue单文件项目构建 回到顶部 VUE2 第六天学习--- vue单文件项目构建 VUE单文件组件在Vue项目中,然后使用 new Vue({el: '#cont ...

  5. QT入门学习笔记2:QT例程

    转至:http://blog.51cto.com/9291927/2138876 Qt开发学习教程 一.Qt开发基础学习教程 本部分博客主要根据狄泰学院唐老师的<QT实验分析教程>创作,同 ...

  6. PyQt(Python+Qt)学习随笔:使用实例方法赋值方式捕获事件

    专栏:Python基础教程目录 专栏:使用PyQt开发图形界面Python应用 专栏:PyQt入门学习 老猿Python博文目录 老猿学5G博文目录 在<第15.17节 PyQt(Python+ ...

  7. PyQt(Python+Qt)学习随笔:QDial刻度盘部件功能简介

    专栏:Python基础教程目录 专栏:使用PyQt开发图形界面Python应用 专栏:PyQt入门学习 老猿Python博文目录 老猿学5G博文目录 一.概述 Designer中的Dial刻度盘输入部 ...

  8. PyQt(Python+Qt)学习随笔:QSlider滑动条部件功能简介

    专栏:Python基础教程目录 专栏:使用PyQt开发图形界面Python应用 专栏:PyQt入门学习 老猿Python博文目录 老猿学5G博文目录 一.概述 Designer输入部件中的Horizo ...

  9. PyQt(Python+Qt)学习随笔: QDoubleSpinBox浮点数字设定部件简介

    专栏:Python基础教程目录 专栏:使用PyQt开发图形界面Python应用 专栏:PyQt入门学习 老猿Python博文目录 老猿学5G博文目录 在<PyQt(Python+Qt)学习随笔: ...

随机推荐

  1. Material Design设计的开源代码

    https://github.com/telly/FloatingAction http://www.csdn.net/article/2014-11-21/2822753-material-desi ...

  2. Linux操作系统入门教程

    http://www.linuxidc.com/Linux/2015-07/120815p8.htm

  3. 由于 web 服务器上此资源的访问控制列表(acl)配置或加密设置,您无权查看此目录或页面。

    场景:IIS中遇到无法预览的有关问题(HTTP 异常 401.3 - Unauthorized 由于 Web 服务器上此资源的访问控制列表(ACL)配置或加密设置 IIS中遇到无法预览的问题(HTTP ...

  4. jQuery之call()方法的使用

    最近在做项目时候,写了几行关于DOM操作的代码,在方法中使用了this,在后期重构的时候,想将这段分离出来做成一个方法. 最开始想的很简单,就直接分离出来使用方法名称调用即可. 但是实际操作的时候没有 ...

  5. zookeeper常用sehll命令

    ZooKeeper服务命令: 在准备好相应的配置之后,可以直接通过zkServer.sh 这个脚本进行服务的相关操作 1. 启动ZK服务:       sh bin/zkServer.sh start ...

  6. 如何在Android中添加系统服务

    一,在frameworks/base/core/java/android/content/Context.java中添加 public static final String RADIO_SERVIC ...

  7. sublime text3 Emmet (原zenCoding)安装方法

    1.安装使用Package Control组件安装 (1)打开控制台 (mac)control+`; (win)ctrl+` (2)复制一下代码并回车 import urllib.request,os ...

  8. Application Fundamentals

    Application Fundamentals 署名:译言biAji 链接:http://developer.android.com/guide/topics/fundamentals.html 应 ...

  9. IP组播技术介绍及实现例子

    引 言 近年来,随着Internet的迅速普及和爆炸性发展,在Internet上产生了许多新的应用,其中不少是高带宽的多媒体应用,譬如网 络视频会议.网络音频/视频广播.AOD/VOD.股市行情发布. ...

  10. Quick Cocos2dx 与 DragonBones

    照着官方的例子试验了一下DragonBone的使用,代码如下: local AnotherScene = class("AnotherScene", function() retu ...