QT第六天学习
基本事件:
鼠标事件
键盘事件
绘制事件
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第六天学习的更多相关文章
- Qt的学习资料比起其它C/C++的GUI组件来说已经算很全的了
Qt的学习资料比起其它C/C++的GUI组件来说已经算很全的了.Google的话能解决很多问题,如果没搜到资料的话,如果不是问题太过具体或者奇葩,那就是搜索方法的问题.中文教程中,Qt学习之路系列很不 ...
- [转] Qt 多线程学习
Qt 多线程学习 转自:http://www.cnblogs.com/IT-BOY/p/3544220.html 最近的项目上用到了关于多线程的知识,自己也比较感兴趣,所以就拿了那本<C++ G ...
- Qt入门学习——Qt 5 帮助文档的使用
Qt入门学习——Qt 5 帮助文档的使用 学习图形界面开发,肯定离不开帮助文档的使用,因为它不像 C 语言那样就那么几个函数接口,图形接口的接口可以用海量来形容,常用的我们可能能记住,其它的真的没有必 ...
- VUE2 第六天学习--- vue单文件项目构建
阅读目录 VUE2 第六天学习--- vue单文件项目构建 回到顶部 VUE2 第六天学习--- vue单文件项目构建 VUE单文件组件在Vue项目中,然后使用 new Vue({el: '#cont ...
- QT入门学习笔记2:QT例程
转至:http://blog.51cto.com/9291927/2138876 Qt开发学习教程 一.Qt开发基础学习教程 本部分博客主要根据狄泰学院唐老师的<QT实验分析教程>创作,同 ...
- PyQt(Python+Qt)学习随笔:使用实例方法赋值方式捕获事件
专栏:Python基础教程目录 专栏:使用PyQt开发图形界面Python应用 专栏:PyQt入门学习 老猿Python博文目录 老猿学5G博文目录 在<第15.17节 PyQt(Python+ ...
- PyQt(Python+Qt)学习随笔:QDial刻度盘部件功能简介
专栏:Python基础教程目录 专栏:使用PyQt开发图形界面Python应用 专栏:PyQt入门学习 老猿Python博文目录 老猿学5G博文目录 一.概述 Designer中的Dial刻度盘输入部 ...
- PyQt(Python+Qt)学习随笔:QSlider滑动条部件功能简介
专栏:Python基础教程目录 专栏:使用PyQt开发图形界面Python应用 专栏:PyQt入门学习 老猿Python博文目录 老猿学5G博文目录 一.概述 Designer输入部件中的Horizo ...
- PyQt(Python+Qt)学习随笔: QDoubleSpinBox浮点数字设定部件简介
专栏:Python基础教程目录 专栏:使用PyQt开发图形界面Python应用 专栏:PyQt入门学习 老猿Python博文目录 老猿学5G博文目录 在<PyQt(Python+Qt)学习随笔: ...
随机推荐
- applicationContext.xml文件配置模板
<?xml version="1.0" encoding="gb2312"?><!-- Spring配置文件的DTD定义-->< ...
- Git 学习资源
在线教程 Try Git: Git初学者绝不能错过的Git上手资源. 廖雪峰Git教程: 比较系统的中文在线教程 易百Git教程 : 另一个比较全的中文在线教程 Git Immersion : A V ...
- 原创:LoadTest系列之参数时,设置提取参数的方式
在对脚本进行参数化后,可以通过设置Data source最底层节点的属性Access Method来控制提取数据的方式. 1. 选中Data source的tables下的节点 2. 打开该节点的Pr ...
- smali插入log,打印变量
一:Log打印变量: Log打印字符串: #liyanzhong debug const-string v1, "TAG" const-string v2, "xunbu ...
- mac 剪切文件
首先选中文件,按Command+C复制文件:然后按Command+Option+V:就可以把你的文件剪走了!在这里补充一下,我这里讲的是剪切文件夹,不是剪切文本和文字!Command+X只能剪切文字文 ...
- JDBC 数据库连接池
http://www.cnblogs.com/lihuiyy/archive/2012/02/14/2351768.html JDBC 数据库连接池 小结 当对数据库的访问不是很频繁时,可以在每次 ...
- NSMutableDictionary
NSDictionary *dic = @{@"name":@"yj", @"age":@"24", @"ho ...
- 绿色版Tomcat 启动 + 停止 + 随系统自动启动 - - 博客频道 - CSDN.NET
body { font-family: "Microsoft YaHei UI","Microsoft YaHei",SimSun,"Segoe UI ...
- hellocharts-android开源图表库(效果非常好)
泡在网上的日子 发表于 2014-11-07 12:28 第 33156 次阅读 chart 2 编辑推荐:稀土掘金,这是一个高质量的技术干货分享社区,web前端.Android.iOS.设计资源和产 ...
- C#调用bat 不显示DOS窗口,禁止DOS窗口一闪而过
ProcessStartInfo startInfo = new ProcessStartInfo(); startInfo.CreateNoWindow = true;//不创建窗口