[QT]——QPushButton & QFontDialog应用

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());
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值