QT day4

一、模拟面试

指针与引用的区别
C/C++的区别C是完全面向过程的语言,C++中包含C中的全部功能,并且具有面向对象的特征,属于半面向过程,半面向对象
对QT中哪些控件比较熟悉QWidget,
信号与槽信号与槽机制是Qt的一个重要机制,信号只需要声明,不需要定义,槽函数需要声明和定义,使用connect函数将信号与槽函数连接,
对象树模型
什么情况下使用多线程
使用多线程需要注意什么线程是任务调度的最小单位,多线程共享同一进程的资源时可能会出现竞态,及多个线程同时
select和poll和epoll的区别
描述一下智能指针
TCP的TTL
共享内存和消息队列的区别共享内存是在外部空间映射一块空间,并设置为

二、使用Qt Creator制作简易闹钟

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>
#include <QPaintEvent>
#include<QDebug>
#include<QPainter>
#include <QTimer>
#include <QTime>
#include <QTimerEvent>
#include <QDateTime>
#include <cmath>
#include <QLabel>
#include <QIcon>
#include <QPalette>
#include <QColor>
#include <QBrush>

QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACE

class Widget : public QWidget
{
    Q_OBJECT

public:
    Widget(QWidget *parent = nullptr);
    ~Widget();

    void mouseMoveEvent(QMouseEvent *event) override;
    void mousePressEvent(QMouseEvent *event) override;

private:
    Ui::Widget *ui;

    QString SysTime;    //系统时间
    double hour;       //小时
    double minute;        //分钟
    double second;        //秒数
    double msec;     //毫秒
    int SysTimeTid = 0;        //系统定时器id号
    QPixmap *pix;           //映射屏幕
    QPixmap *pixhour;
    QPixmap *pixmin;
    QPixmap *pixsec;
    void paintEvent(QPaintEvent *event)override;    //绘画事件
    void timerEvent(QTimerEvent *event) override ;  //时间事件

      QPoint temp;    //辅助向量坐标点
};
#endif // WIDGET_H
#include "widget.h"
#include "ui_widget.h"

Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);
    this->resize(600, 600);
    //触发刷新时间事件
    SysTimeTid = this->startTimer(1);
    this->setWindowIcon(QIcon(":/pictrue/clock.png"));    //窗口图标
    setWindowFlags(windowFlags() | Qt::FramelessWindowHint);    //关闭上方标题栏

}

Widget::~Widget()
{
    delete ui;
}

void Widget::paintEvent(QPaintEvent *event)
{

    QPainter painter(this);
    painter.setRenderHint(QPainter::Antialiasing, true);    //抗锯齿
//    painter.setBrush(QColor("white"));
//    painter.setPen(Qt::NoPen);
//    painter.drawRoundedRect(rect(), 100, 100); // 设置圆角半径为10像素
    QPalette palette = this->palette();
    palette.setColor(QPalette::Background, "#1C1C1D"); // 设置背景颜色
    this->setAutoFillBackground(true);
    this->setPalette(palette);


//    // 创建一个圆角矩形路径
//    QPainterPath path;
//    path.addRoundedRect(rect(), 100, 100); // 设置圆角半径为10像素

//    // 使用路径绘制圆角矩形
//    painter.drawPath(path);

//    painter.setRenderHint(QPainter::Antialiasing, true);

    QPainterPath painterPath;
    painterPath.addEllipse(100, 100, 400, 400);
    painter.setClipPath(painterPath);  //添加绘制区域,为圆形绘制
    QBrush brush("#FFFFFE"); // 填充色
    painter.setBrush(brush);
    painter.drawEllipse(100, 100, 400, 400);


    QTransform transform;
    transform.translate(300, 300);  //平移坐标原点
    painter.setTransform(transform);

    painter.setPen(Qt::black);
    // painter.drawPoint(250,250);

    for(int i=1;i<=60;i++)
    {
        painter.setPen(Qt::red);
        painter.save();
        painter.rotate(6*i);
        if(i%5==0)
        {
            QPen pen;
            pen.setColor("#8B8C8B"); // 设置画笔颜色
            pen.setWidth(10);      // 设置画笔宽度
            pen.setCapStyle(Qt::RoundCap); // 设置画笔端点为圆形
            painter.setPen(pen);
            painter.drawLine(0, -185, 0, -155);    //大刻度
            //painter.drawText(QPoint(-5, -160), QString::number(i/5));  //数字
        }
        else
        {
            QPen pen;
            pen.setColor(Qt::black); // 设置画笔颜色
            pen.setWidth(1);      // 设置画笔宽度
            painter.setPen(pen); //小刻度
            painter.drawLine(0, -185, 0, -175);
        }
        painter.restore();
    }

    QPen pen;
    painter.save();
    pen.setColor(Qt::black); // 设置画笔颜色
    pen.setWidth(10);      // 设置画笔宽度为
    pen.setCapStyle(Qt::RoundCap); // 设置画笔端点为圆形
    painter.setPen(pen);  //时针
    painter.rotate(30*(hour+minute/60+second/360));  //24小时
    painter.drawLine(0, 0, 0, -90);
    painter.restore();
    painter.save();

    painter.save();
    pen.setColor(Qt::black); // 设置画笔颜色
    pen.setWidth(10);      // 设置画笔宽度
    pen.setCapStyle(Qt::RoundCap); // 设置画笔端点为圆形
    painter.setPen(pen);  //分针
    painter.rotate(6*(minute+second/60));  //60分钟
    painter.drawLine(0, 0, 0, -185);
    painter.restore();

    pen.setColor("#F09A37"); // 设置画笔颜色
    pen.setWidth(3);      // 设置画笔宽度
    painter.setPen(pen);   // 应用新的画笔设置
    pen.setCapStyle(Qt::RoundCap); // 设置画笔端点为圆形
    painter.rotate(6* (second+(msec/1000) + 1)); // 旋转度数 360度 60秒钟
    painter.drawLine(0, 20, 0, -185);
    painter.restore(); // 旋转完成之后还原

}



void Widget::timerEvent(QTimerEvent *event)
{
    //判断是否为自己的定时器
    if(event->timerId() == SysTimeTid)
    {
        //系统定时器
        //在ui界面显示日期时间
        QDateTime currentDateTime = QDateTime::currentDateTime();
        QTime currentTime = currentDateTime.time();
        hour = currentTime.hour();    // 获取小时
        minute = currentTime.minute();   // 获取分钟
        second = currentTime.second();   // 获取秒数
        msec = currentTime.msec();      //毫秒
        //        qDebug()<<hour;
        //        qDebug()<<minute;
        //        qDebug()<<second;
        //        qDebug()<<msec;
        //刷新界面
        this->update();
    }
}

void Widget::mouseMoveEvent(QMouseEvent *event)
{
    this->move(event->globalPos() - temp);
}

void Widget::mousePressEvent(QMouseEvent *event)
{
    //记录点击时鼠标的
    temp = event->globalPos() - this->pos();
}

#include "widget.h"

#include <QApplication>

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值