基本事件:

鼠标事件

键盘事件

绘制事件

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. GridView 编辑,更新,删除 等操作~~

    protected void GridView1_RowCancelingEdit(object sender, GridViewCancelEditEventArgs e) { GridView1. ...

  2. MyEclipse快捷键全

    Ctrl + Shift + O: 引入imports语句 Ctrl + Shift + T: 打开Open Type查找类文件 Ctrl + Shift + F4: 关闭打开的所有窗口 Ctrl + ...

  3. C#对象序列化笔记

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.R ...

  4. C# 的sql server like 的参数

    //试了多种方式,这样写like的参数才正确 sb.Append(" and a.GOODSID like '%'+@GOODSID+'%'"); list.Add(new Sql ...

  5. js url编码函数

    JavaScript中有三个可以对字符串编码的函数,分别是: escape,encodeURI,encodeURIComponent,相应3个解码函数:unescape,decodeURI,decod ...

  6. 17.4.3 使用MulticastSocket实现多点广播(1)

    http://book.51cto.com/art/201203/322560.htm <疯狂Java讲义(第2版)>本书深入介绍了Java编程的相关方面,全书内容覆盖了Java的基本语法 ...

  7. openstack名称发音收集

    MariaDB:    maria['mɛərɪr] Corosync:    coro[kə'roʊ]    sync[sɪŋk] pacemaker:    [ˈpesˌmekɚ] galera: ...

  8. svn + jenkins + maven 实现java环境的自动化构建和部署

    1. 环境说明: 系统CentOS 7 x64 IP:  10.6.0.126 1.1 首先安装配置 svn Centos 7  通过yum 安装svn 既可, 版本为1.7.14 # yum -y ...

  9. iOS10适配——错误:Code=3000

    error : Error Domain=NSCocoaErrorDomain Code=3000 "未找到应用程序的“aps-environment”的权利字符串" UserIn ...

  10. ARM-LINUX学习笔记-1

    安装完linux之后记得系统更新,更新使用apt命令,如下(记得使用之前使用sudo -i 指令切换到root用户模式) apt-get update  更新系统软件源,相当于查找更新 apt-get ...