QT/C++——主窗口和事件处理
一、主窗口
上面就是一个主窗口,主窗口中的每一个都是Action
这次新建工程要选择mainwindow
#ifndef MAINWINDOW_H
#define MAINWINDOW_H#include <QMainWindow>
#include <QAction>
#include <QTextEdit>
#include <QLabel>
#include <QFileDialog>
#include <QColorDialog>class MainWindow : public QMainWindow
{Q_OBJECTpublic:MainWindow(QWidget *parent = 0);~MainWindow();
public slots:void openf(){QString filename = QFileDialog::getOpenFileName();te->setText(filename);}void copyf(){te->copy();}void pastf(){te->paste();}void setcf(){QColor ccc = QColorDialog::getColor();te->setTextColor(ccc);}
private:QAction *openfileact;QAction *copyfileact, *pastfileact;QAction *setcoloract;//centralQTextEdit *te;//statusQLabel *slb;
};#endif // MAINWINDOW_H
#include "mainwindow.h"
#include <QMenu>
#include <QMenuBar>
#include <QToolBar>
#include <QStatusBar>MainWindow::MainWindow(QWidget *parent): QMainWindow(parent)
{//create actionsopenfileact = new QAction(QIcon("open.png"), "open");openfileact->setShortcut(QKeySequence(tr("Ctrl+O")));copyfileact = new QAction(QIcon("copy.png"),"copy");pastfileact = new QAction(QIcon("past.png"),"past");setcoloract = new QAction(QIcon("color.png"),"setcolor");//create meuQMenu *fileMenu = menuBar()->addMenu(tr("&File"));fileMenu->addAction(openfileact);QMenu *editMenu = menuBar()->addMenu(tr("&Edit"));editMenu->addAction(copyfileact);editMenu->addAction(pastfileact);QMenu *setMenu = menuBar()->addMenu(tr("&Set"));setMenu->addAction(setcoloract);//create toolbarsQToolBar *tfile = addToolBar("file");tfile->addAction(openfileact);QToolBar *tedit = addToolBar("edit");tedit->addAction(copyfileact);tedit->addAction(pastfileact);QToolBar *tset = addToolBar("set");tset->addAction(setcoloract);//cenctralte = new QTextEdit("hello");te->setMinimumSize(640, 480);setCentralWidget(te);//staturesslb = new QLabel("1.txt*");QStatusBar *stb = statusBar();stb->addWidget(slb);connect(openfileact, SIGNAL(triggered(bool)), this, SLOT(openf()));connect(copyfileact, SIGNAL(triggered(bool)), this, SLOT(copyf()));connect(pastfileact, SIGNAL(triggered(bool)), this, SLOT(pastf()));connect(setcoloract, SIGNAL(triggered(bool)), this, SLOT(setcf()));}MainWindow::~MainWindow()
{}
运行后是这样的,
还可以使用快捷方式并且有小图标。
可以复制黏贴设置颜色,反正需要什么加什么就好了
二、事件
2.1事件处理
定时器一秒输出一次
鼠标点击记录位置
滑轮滚动输出正负,按键输出的是标号不是具体的按下了什么
#ifndef WIDGET_H
#define WIDGET_H#include <QWidget>
#include <QDebug>
#include <QMouseEvent>//鼠标
#include <QKeyEvent>//键盘
#include <QWheelEvent>//滚轮class Widget : public QWidget
{Q_OBJECTpublic:Widget(QWidget *parent = 0);~Widget();void mousePressEvent(QMouseEvent *event){qDebug()<<"pressssss: "<<event->pos();}void mouseMoveEvent(QMouseEvent *event){qDebug()<<"moving!"<<event->pos();}void keyPressEvent(QKeyEvent *event){qDebug()<<"key: "<<event->key();}void wheelEvent(QWheelEvent *event){qDebug()<<"wheel: "<<event->delta();}void timerEvent(QTimerEvent *event){qDebug()<<"timer!";}
};#endif // WIDGET_H
2.2绘图事件
可以像一个表一样是可以动的
#ifndef WIDGET_H
#define WIDGET_H#include <QWidget>
#include <QDebug>
#include <QPainter>class Widget : public QWidget
{Q_OBJECTpublic:Widget(QWidget *parent = 0);~Widget();void paintEvent(QPaintEvent *event){qDebug()<<"ppppppp";QPainter p(this);p.translate(this->width()/2, this->height()/2);p.drawEllipse(QPoint(0, 0), 100, 100);// p.drawLine(0, 0, 50, 50);p.rotate(i++*10);p.drawLine(0, 0, 50, 50);}void timerEvent(QTimerEvent *event){update();}private:int i;
};#endif // WIDGET_H
2.3双缓冲绘图
#ifndef WIDGET_H
#define WIDGET_H#include <QWidget>
#include <QMouseEvent>
#include <QPainter>class Widget : public QWidget
{Q_OBJECTpublic:Widget(QWidget *parent = 0);~Widget();void mousePressEvent(QMouseEvent *event){startp = event->pos();}void mouseReleaseEvent(QMouseEvent *event){saveit = true;update();}void mouseMoveEvent(QMouseEvent *event){endp = event->pos();update();}void paintEvent(QPaintEvent *event){if(saveit){QPainter px(pix);px.drawLine(startp, endp);saveit = false;}QPainter p(this);p.drawPixmap(0, 0, *pix);p.drawLine(startp, endp);}private:QPoint startp;//起点QPoint endp;//终点QPixmap *pix;bool saveit;
};#endif // WIDGET_H
双缓冲绘图其实就是把第一次的绘图用一个东西保存了一下再一起显示出来,保证之前的痕迹可以保留
2.4事件过滤器
过滤器就是对事件进行过滤的一个类,他只要是Qobject类的派生类,并且他满足一个eventFilter
上图的y就是一个过滤器,y不要的x才处理。
下面用一个照片阅读器来演示一下什么是过滤器
没啥看的看截图吧
代码有点多还是放资源里。
QT/C++——主窗口和事件处理相关推荐
- Qt实现主窗口和子窗口的切换
学习中遇到不明白的按F1查帮助文档! 1.根据基类QWidget派生出两个类,MainWidget和SubWidget 2.这里需要强调的一点的只有如何从子窗口切换到主窗口:因为为了把主窗口切换到子窗 ...
- Qt Widgets——主窗口及其主要组成部分
Main Window and Related Classes QAction 动作类,用于当做一个菜单项或工具项插入菜单或工具栏 QActionGroup 动作组,用于管理多个动作,设置它们之间的互 ...
- Qt/C++主窗口和子窗口之间传递参数
一.用信号和槽 二.在主窗口声明一个子窗口的指针,用这个指针调用子窗口的函数 dialog *pic=new dialog(); pic->getColor(QColor col); col就可 ...
- Qt的主窗口背景设置
主界面设置背景一般有设置背景图片和背景颜色的需求,其实二者之间设置方法类似 目录 主界面设置背景一般有设置背景图片和背景颜色的需求,其实二者之间设置方法类似 方法一:最简单的方式是通过ui界面来设置, ...
- qt获取窗口的右上角位置_如何获得 Qt窗口部件在主窗口中的位置--确定鼠标是否在某一控件上与在控件上的位置...
用Qt Creator 设计程序时,最方便的就是ui设计器,可以很容易的得到想要的布局. 但是这样自动布局带来的后果是很难知道窗口中某一部件在主窗口中的相对位置. 在处理子窗口鼠标事件时变的很麻烦.主 ...
- QT开发(二十二)——QMainWindow主窗口
谢绝转载 一.主窗口简介 QT中直接支持主窗口,QMainWindow是QT中主窗口的基类,是继承于QWidget类的容器型组件. QMainWindow内部封装了菜单栏.工具栏.中心组件.停靠组件. ...
- QT creator使用(五):应用程序主窗口QMainWindow
目录 5.0 本章简介 5.1 主窗口框架 5.1.1 Qt资源系统.菜单栏和工具栏 5.1.2 中心部件 5.1.3 Dock部件 5.1.4 状态栏 5.1.5 自定义菜单 5.2 富文本处理 5 ...
- Qt应用程序主窗口之一:主窗口框架
对于日常见到的应用程序而言,许多都是基于主窗口的,主窗口中包含了菜单栏.工具栏.状态栏和中心区域等.这一章会详细介绍主窗口的每一个部分,还会涉及资源管理.富文本处理.拖放操作和文档打印等相关内容.重点 ...
- linux 界面工具 qt,Qt主窗口中的工具栏
工具栏类 QToolBar 快捷项 QAcitonQToolBar* tb = addToolBar("Tool Bar");//addToolBar是Qt主窗口的成员函数,在主窗 ...
最新文章
- fedora yum Another app is currently holding the yum lock
- 烧脑又过瘾!关于c²= b² + a²,你不知道的N个事实
- session和cookie的区别和联系
- OpenGL纹理-12.5、纹理坐标
- mysql 5.1 1067,mysql服务1067错误多种解决方案汇总
- Java商城秒杀系统的设计与实战视频教程(SpringBoot版)_汇总贴
- html5调用系统声音1s响一次_为你的html5网页添加音效示例
- react中使用构建缓存_如何使用React,GraphQL和Okta构建健康跟踪应用
- thinkphp5 自定义分页样式
- mysql 计算农历_干支方法结算(农历算法)
- Invalid bound statement (not found): com.lin.dao.AccountDao.findAll 解决方式之一
- 备考H12-221	HCIP-Routing Switching-IERS的一些笔记
- Choerodon前端环境变量方案
- ArcMap学习笔记(三)地图数字化
- java 过期注解_JDK新特性-----注解@ (@Override、@Deprecated、@SuppressWarings)
- java机器学习库_6大最常用的Java机器学习库一览
- 服务器型号 数量和配置,一配置总体情况设备名称设备配置数量服务器HPDL580G7高性能.doc...
- ununtu下安装rar工具
- 旭凤为什么和锦觅共付鸿蒙,《香蜜》中旭凤对锦觅做的5件事,最让她开心的不是灵修,而是它...
- word2010尾注[]格式添加参考文献
热门文章
- 简单好用的录音软件?
- JavaWeb实现登录验证码
- ·穷途末路之举·解决VirtualBox启动问题-Error relaunching VirtualBox VM process 5/terminated with exit code1(0x1)
- 建立一个STM32F411RTOS
- 微分dx、dy是无穷小吗?
- 如何安装Python的PIL库
- python批量识别二维码图片_python批量操作生成二维码
- 流体的“流线”和“迹线”定义和区别。
- HDU 4416 (后缀自动机)
- 【MSSql2000】GroupByOrderBy