基本事件:

鼠标事件

键盘事件

绘制事件

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. 解决Only the original thread that created a view hierarchy can touch its views

    这种异常出现在子线程中处理UI操作产生的异常,将UI操作放在主线程中就OK了

  2. iOS多视图传值方式之通知传值(NSNotification;NSNotificationCenter)

    iOS传值方式之5:通知传值 第一需要发布的消息,再创建NSNotification通知对象,然后通过NSNotificationCenter通知中心发布消息(NSNotificationCenter ...

  3. implemented loader.php

    http://stackoverflow.com/questions/11787176/manage-url-routes-in-own-php-framework This is how i imp ...

  4. 注解用法详解——@SuppressWarnings

    一.前言 编码时我们总会发现如下变量未被使用的警告提示: 上述代码编译通过且可以运行,但每行前面的“感叹号”就严重阻碍了我们判断该行是否设置的断点了.这时我们可以在方法前添加 @SuppressWar ...

  5. Linux下的强大工具之一sed(转),Shell必备

    sed命令基本用法sed是一个非交互式文本编辑器,它可以对文本文件和标准输入进行编辑,标准输入可以是来自键盘输入.文件重定向.字符串.变量.来自管道的文本等等.sed从文本的一个文本行或标准输入中读取 ...

  6. iOS开发——NSArray中的字符串排序

     NSArray *arr = @[@"fjhsf",@"wert",@"fdg",@"asd",@"fs g ...

  7. (中等) HDU 5046 Airport ,DLX+可重复覆盖+二分。

    Description The country of jiuye composed by N cites. Each city can be viewed as a point in a two- d ...

  8. (简单) UVA 11624 Fire! ,BFS。

    Description Joe works in a maze. Unfortunately, portions of the maze have caught on fire, and the ow ...

  9. php学习-数组(一)

    数组函数可以对大量性质相同的数据进行存储,排序,插入及删除等操作. 学习任务: 声明数组,输出数组,遍历数组,查询数组中指定元素,获取数组中的最后一个元素. 删除数组中重复的元素.统计数组中元素的个数 ...

  10. CodeForces 652B z-sort

    先对序列排个序. 例如:1 2 3 4 5 6 7 我们把序列分成两半,前一半是1 2 3 4,后一半是5 6 7 然后,我们从前一半取最小的一个,再从后一半取最小的一个..一直操作下去就能构造出答案 ...