QT线程、定时器、画家、登录界面代码、QWidget为例

QT线程、定时器、画家、登录界面代码、QWidget为例


#端午趣味征文赛–用代码过端午#
登陆界面,画笔,画家,窗口最小化,最大化,关闭,定时器,线程
在这里插入图片描述

main.c

#include "widget.h"

#include <QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    Widget w;
    w.show();
    return a.exec();
}

widget.h

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>
#include<QMouseEvent>
#include<QPoint>
#include<QPaintEvent>

QT_BEGIN_NAMESPACE
namespace Ui {
    
     class Widget; }
QT_END_NAMESPACE

class Widget : public QWidget
{
    
    
    Q_OBJECT
public:

public:
    Widget(QWidget *parent = nullptr);
    ~Widget();
protected:
    void mouseMoveEvent(QMouseEvent *event) override;//鼠标移动事件
    void mousePressEvent(QMouseEvent *event) override;//鼠标按压事件
    //重写绘图事件
    //如果给窗口绘图,一定要在paintEvent()实现
    //绘图事件内部自动调用
    void paintEvent(QPaintEvent *) override;

private slots:
    void on_toolButton_clicked();

    void on_toolButton_2_clicked();

    void on_toolButton_3_clicked();

    void on_pushButton_2_clicked();

    void on_pushButton_3_clicked();
    void dealTimeout();//定时器

private:
    Ui::Widget *ui;
    QPoint   p;
    int x;
   QTimer *myTimer;//声明定时器变量
};
#endif // WIDGET_H

widget.c

#include "widget.h"
#include "ui_widget.h"
#include <QPainter>//画家
#include <QPen>//画笔
#include <QBrush>//画刷
#include<QTimer>
#include <QThread>
#include <QDebug>

Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    
    
    ui->setupUi(this);
    x=0;
    setWindowTitle("TTmusic");
    //设置QWidget窗口为透明
    setAttribute(Qt::WA_TranslucentBackground);
    //去掉窗口边框
    setWindowFlags(Qt::FramelessWindowHint | windowFlags());
    ui->pushButton_3->setStyleSheet("background-image:url(C:/Users/SuJieYin/Desktop/SX/1.PNG);");

    myTimer = new QTimer(this);//定时器作用于本对象
    //只要定时器启动,自动触发timeout()
    //myTimer向本窗口发送timeout类型的请求,槽函数为dealTimeout
    connect(myTimer,&QTimer::timeout,this,&Widget::dealTimeout);
}

Widget::~Widget()
{
    
    
    delete ui;
    myTimer->stop();
}

//==========================================================================================
//鼠标移动事件:通过鼠标,窗口可以任意移动
void Widget::mouseMoveEvent(QMouseEvent *event)
{
    
    
    if(event->buttons() & Qt::LeftButton)
        {
    
    
            //移到左上角
            move(event->globalPos() - p);
        }
}
//鼠标按压事件
void Widget::mousePressEvent(QMouseEvent *event)
{
    
    
    if(event->button() == Qt::LeftButton)
    {
    
    
       //求坐标差值
       //当前点击坐标-窗口左上角坐标
        p   =   event->globalPos()-this->frameGeometry().topLeft();
    }
}
//画图
void Widget::paintEvent(QPaintEvent *)
{
    
    
    QPainter  p;//创建画家对象
    p.begin(this);//指定framd对象为绘图设备
   //画背景图
    p.drawPixmap(rect(),QPixmap("C:/Users/SuJieYin/Desktop/SX/2.PNG"));
    //定义画笔
    QPen pen;
    pen.setWidth(5);//设置线宽
    //pen.setColor(Qt::red);//设置线条颜色
    pen.setColor( QColor(14,9,234));
    pen.setStyle(Qt::SolidLine);//设置线条风格
    //把画笔交给画家
    p.setPen(pen);
    //画直线
    p.drawLine(50,50,700,50);//直线1
    p.drawLine(50,50,50,200);//直线2
    p.drawLine(700,50,50,200);//直线3

    //创建画刷对象
    QBrush brush;
    brush.setColor(Qt::red);
    brush.setStyle(Qt::Dense1Pattern);
    //把画刷交给画家
    p.setBrush(brush);
    //画矩形
    p.drawRect(150,150,50,50);
    //画圆形
    p.drawEllipse(QPoint(150,150),50,25);//qpointer圆心,50,25为x,y半径,得到的是一个椭圆
    //画图
    p.drawPixmap(x,200,80,80,QPixmap("C:/Users/SuJieYin/Desktop/SX/2.PNG"));
    p.end();//结束绘画


}
//===========================================================================================

//-:显示窗口最小化
void Widget::on_toolButton_clicked()
{
    
    
    showMinimized();
}
//[]:显示窗口最大化
void Widget::on_toolButton_2_clicked()
{
    
    
   showMaximized();
}
//窗口关闭
void Widget::on_toolButton_3_clicked()
{
    
    
    close();
}
//一个按钮的点击事件,一张图片点击则向前走20像素
void Widget::on_pushButton_2_clicked()
{
    
    
    x+=20;
       if(x>width()){
    
    //超出右边框,重置到左边框位置
           x=0;
       }
       //刷新窗口,让窗口重绘,整个窗口都刷新
       update();//间接调用paintEvent()
}

//定时器函数
void Widget::on_pushButton_3_clicked()
{
    
    
    ui->label_3->hide();
    ui->frame->setGeometry(0,0,800,640);
    ui->pushButton_3->setStyleSheet("background-image:url(C:/Users/SuJieYin/Desktop/SX/1.PNG);");
    ui->toolButton->setStyleSheet("background-image:url(C:/Users/SuJieYin/Desktop/SX/1.PNG);");
    ui->toolButton_2->setStyleSheet("background-image:url(C:/Users/SuJieYin/Desktop/SX/1.PNG);");
    ui->toolButton_3->setStyleSheet("background-image:url(C:/Users/SuJieYin/Desktop/SX/1.PNG);");
    ui->pushButton_2->hide();
    if(myTimer->isActive()== false)
       {
    
    
           myTimer->start(100);
       }
       qDebug() << "over";
}

void Widget::dealTimeout()
{
    
    
    static int i = 0;
       i++;
       //设置lcd的值
       ui->lcdNumber->display(i);
}

演示效果

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/m0_45463480/article/details/125158645