1.开发记事本
头文件
#ifndef WIDGET_H
#define WIDGET_H
#include <QTextEdit>
#include <QWidget>
#include <QDebug>
#include <QFont>
#include <QFontDialog>
#include <QColor>
#include <QColorDialog>
#include <QFile>
#include <QFileDialog>
#include <QString>
#include <QPushButton>
namespace Ui {
class Widget;
}
class Widget : public QWidget
{
Q_OBJECT
public:
explicit Widget(QWidget *parent = nullptr);
~Widget();
public slots:
void on_pushButton_7_clicked();
void on_pushButton_6_clicked();
void on_pushButton_5_clicked();
void on_pushButton_4_clicked();
private:
Ui::Widget *ui;
QPushButton *typebtn;
QPushButton *colorbtn;
QPushButton *openbtn;
QPushButton *savebtn;
QTextEdit *textEdit;
};
#endif // WIDGET_H
功能函数
#include "widget.h"
#include "ui_widget.h"
Widget::Widget(QWidget *parent) :
QWidget(parent),
ui(new Ui::Widget)
{
ui->setupUi(this);
//更改窗口图标
this->setWindowIcon(QIcon(":/../QQ/icon/QQ.png"));
//更改窗口名字
//输出窗口名称
qDebug()<<"title of window:"<<this->windowTitle();
//更改窗口名称
this->setWindowTitle("QQ");
qDebug()<<"title of window:"<<this->windowTitle();
//设置界面大小
this->setFixedSize(800,800);
//设置字体按钮
typebtn=new QPushButton("字体",this);
typebtn->resize(100,50);
typebtn->move(50,600);
//设置颜色按钮
colorbtn=new QPushButton("颜色",this);
colorbtn->resize(100,50);
colorbtn->move(typebtn->x()+200,600);
//设置打开文本按钮
openbtn=new QPushButton("打开文件",this);
openbtn->resize(100,50);
openbtn->move(colorbtn->x()+200,600);
//设置保存文件按钮
savebtn=new QPushButton("保存文件",this);
savebtn->resize(100,50);
savebtn->move(openbtn->x()+200,600);
//设置行文件文本框
textEdit = new QTextEdit(this);
textEdit->setFixedSize(700,500);
textEdit->move(50,50);
connect(typebtn,&QPushButton::clicked,this,&Widget::on_pushButton_7_clicked);
connect(colorbtn,&QPushButton::clicked,this,&Widget::on_pushButton_6_clicked);
connect(openbtn,&QPushButton::clicked,this,&Widget::on_pushButton_5_clicked);
connect(savebtn,&QPushButton::clicked,this,&Widget::on_pushButton_4_clicked);
}
Widget::~Widget()
{
delete ui;
}
//字体按钮槽函数
void Widget::on_pushButton_7_clicked()
{
bool ok; //判断是否选择字体
QFont typebtn =QFontDialog::getFont(&ok,QFont("隶书",10,2,true),this,"选择字体");
//对ok进行判断
if(ok)
{
// qDebug()<<"用户选择字体";
// 将选中文件加载到文本编辑器的文本内容上
//ui->textEdit->setFont(f);
//将选中的字体,加载字体样式
textEdit->setCurrentFont(typebtn);
}
else {
qDebug()<<"用户取消选择字体";
}
}
//颜色按钮槽函数
void Widget::on_pushButton_6_clicked()
{
QColor colorbtn= QColorDialog::getColor(QColor("white"),this,"选择颜色");
if(colorbtn.isValid()) // 初始颜色 父组件 对话框标题
{
// 对颜色进行判断,是否合法
// qDebug()<<"用户选择颜色合法";
//将颜色,设置到字体上
textEdit->setTextBackgroundColor(colorbtn);
}
else {
qDebug()<<"用户先择颜色";
}
}
//打开文件按钮槽函数
void Widget::on_pushButton_5_clicked()
{
QString fileName=QFileDialog::getOpenFileName(this,"选择文件","./","all(*.*);;Text(*.txt);;源文件(*.cpp);;图片(*.png *.jpg *.gif)");
if(fileName.isEmpty())
{
qDebug()<<"用户取消选择文件";
return;
}
//输入文件路径
qDebug()<<fileName;
//文件三部曲:打开,读写,关闭
QFile file(fileName); // 通过获取的文件路径构造出一个文件对象
//判断文件是否存在
if(!file.exists())
{
qDebug()<<"您要打开的文件不存在";
return;
}
//打开文件
if(!file.open(QIODevice::ReadWrite))
{
qDebug()<<"文件打开失败";
}
//读取数据的文件
QByteArray text=file.readAll(); //将文件的所有数据全部读取出来
//将读取的内容展示到ui界面上
textEdit->setText(QString::fromLocal8Bit(text));
//关闭文件
file.close();
}
//保存文件按钮槽函数
void Widget::on_pushButton_4_clicked()
{
//获取文件路径
QString fileName=QFileDialog::getSaveFileName(this,"保存文件","./","ALL(*.*)");
//实例化对象
QFile file(fileName);
//打开文件
if(file.open(QIODevice::ReadWrite))
{
qDebug()<<"文件打开失败";
}
//获取ui界面中的内容
QString msg=textEdit->toPlainText();
//将msg写入文件中
file.write(msg.toLocal8Bit());
//关闭文件
file.close();
}
2.鼠标、键盘事件
头文件
#ifndef WIDGET_H
#define WIDGET_H
#include <QWidget>
#include <QMouseEvent>
#include <QDebug>
namespace Ui {
class Widget;
}
class Widget : public QWidget
{
Q_OBJECT
public:
explicit Widget(QWidget *parent = nullptr);
~Widget();
//鼠标
void mouseMoveEvent(QMouseEvent *event) override;
void mousePressEvent(QMouseEvent *event) override;
void mouseReleaseEvent(QMouseEvent *event) override;
void mouseDoubleClickEvent(QMouseEvent *event) override;
//键盘
void keyPressEvent(QKeyEvent *event) override;
void keyReleaseEvent(QKeyEvent *event) override;
private:
Ui::Widget *ui;
QPoint startpoint;
};
#endif // WIDGET_H
主函数
#include "widget.h"
#include <QApplication>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
Widget w;
w.show();
return a.exec();
}
功能函数
#include "widget.h"
#include "ui_widget.h"
Widget::Widget(QWidget *parent) :
QWidget(parent),
ui(new Ui::Widget)
{
ui->setupUi(this);
this->setMouseTracking(true);
setWindowFlag(Qt::FramelessWindowHint);
}
Widget::~Widget()
{
delete ui;
}
//鼠标移动处理事件
void Widget::mouseMoveEvent(QMouseEvent *event)
{
if(event->buttons()==Qt::LeftButton)
{
//qDebug()<<event->globalPos();
this->move(event->globalPos()-startpoint);
}
else if (event->buttons()==Qt::RightButton)
{
this->close();
}
else if (event->buttons()==Qt::MidButton)
{
ui->label->move(event->x()-100,event->y()-100);
}
}
//鼠标点击处理事件
void Widget::mousePressEvent(QMouseEvent *event)
{
//判断是哪个鼠标被按下
if(event->button()== Qt::LeftButton)
{
// ui->label->setText("鼠标左健被按下");
//qDebug()<<event->pos();
startpoint =event->globalPos()- this->frameGeometry().topLeft();
//鼠标所在全部位置 //当前组件所在全局位置
}
else if(event->button()== Qt::RightButton)
{
ui->label->setText("鼠标右健被按下");
qDebug()<<event->pos();
}
else if(event->button()== Qt::MidButton)
{
ui->label->setText("鼠标中间键被按下");
qDebug()<<event->pos();
}
}
//鼠标释放处理事件
void Widget::mouseReleaseEvent(QMouseEvent *event)
{
//判断是哪个鼠标被按下
if(event->button()== Qt::LeftButton)
{
ui->label->setText("鼠标左健被释放");
qDebug()<<event->pos();
}
else if(event->button()== Qt::RightButton)
{
ui->label->setText("鼠标右健被释放");
qDebug()<<event->pos();
}
else if(event->button()== Qt::MidButton)
{
ui->label->setText("鼠标中间键被释放");
qDebug()<<event->pos();
}
}
//鼠标双击处理事件
void Widget::mouseDoubleClickEvent(QMouseEvent *event)
{
//判断是哪个鼠标被按下
if(event->button()== Qt::LeftButton)
{
ui->label->setText("鼠标左健被双击");
qDebug()<<event->pos();
}
else if(event->button()== Qt::RightButton)
{
ui->label->setText("鼠标右健被双击");
qDebug()<<event->pos();
}
else if(event->button()== Qt::MidButton)
{
ui->label->setText("鼠标中间键被双击");
qDebug()<<event->pos();
}
}
//---------------------------*************-----------------------------------
//键盘
//键盘按下事件处理函数的定义
void Widget::keyPressEvent(QKeyEvent *event)
{
switch(event->key())
{
case'W':
{
if(ui->label->y()<0-ui->label->height())
{
ui->label->move(ui->label->x(),this->height());
}
ui->label->move(ui->label->x(),ui->label->y()-10);
}
break;
case'S':
{
if(ui->label->y()>this->height())
{
ui->label->move(ui->label->x(),0-ui->label->height());
}
ui->label->move(ui->label->x(),ui->label->y()+10);
}
break;
case 'A':
{
if(ui->label->x()<0-ui->label->width())
{
ui->label->move(this->width(),ui->label->y());
}
ui->label->move(ui->label->x()-10,ui->label->y());
}
break;
case'D':
if(ui->label->x()>this->width())
{
ui->label->move(0-ui->label->width(),ui->label->y());
}
ui->label->move(ui->label->x()+10,ui->label->y());
}
}