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)学习随笔: ...
随机推荐
- getHibernateTemplate()
getHibernateTemplate 前提条件:你的类必须继承HibernateDaoSupport 一: 回调函数: public List getList(){ return (List ...
- 文本属性Attributes 初步
转载自:http://www.cnblogs.com/qingche/p/3574995.html 1.NSKernAttributeName: @10 调整字句 kerning 字句调整 2.NSF ...
- aapt: error while loading shared libraries: libstdc++.so.6: wrong ELF class: ELFCLASS64
前阵子在ubuntu上搭载安卓的开发环境(Eclipse+Sdk+Adt),搭载是完成了,但是却出现了该问题: aapt: error while loading shared libraries: ...
- Mac系统下安装Tomcat,以及终端出现No such file or directory的错误提示解决方案
Tomcat,作为一个免费的服务器口碑实在太好,本想安装一个研究研究,无奈电脑是mac系统,在网上搜了一些安装方法总是出错,直到遇到了这篇博客,http://www.cnblogs.com/qingy ...
- Selenium IDE安装
1. 网上下载firefox30版本 http://www.9ht.com/xz/78637.html#addressWrap Selenium IDE 2.9.0下载 http://www.pc ...
- Android4.2以后,多屏幕的支持 学习(一)
前几天总结了Android的多用户支持,过几天准备再总结Android的多屏支持.Android支持3种类型屏幕:主屏幕(Primary Display).外屏幕(External Display)和 ...
- fsck害了我很久了,必须关掉,因为他每次打卡都要推迟数十分钟。
http://crashmag.net/disable-filesystem-check-fsck-at-boot-time Disable the filesystem check (fsck) a ...
- PAT (Advanced Level) 1085. Perfect Sequence (25)
可以用双指针(尺取法),也可以枚举起点,二分终点. #include<cstdio> #include<cstring> #include<cmath> #incl ...
- [数据结构]Treap简介
[写在前面的话] 如果想学Treap,请先了解BST和BST的旋转 二叉搜索树(BST)(百度百科):[here] 英文好的读者可以戳这里(维基百科) 自己的博客:关于旋转(很水,顶多就算是了解怎么旋 ...
- window环境变量
首先Window中有很多乱七八糟的路径变量之类的,归类下来有几类,主要是为了我们分清楚概念,以免搞的糊涂了. 1. Window系统的环境变量:顾名思义,就是系统级别的变量,或者利用我们编程的角度来讲 ...