一、模拟面试
指针与引用的区别 | |
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_NAMESPACEclass Widget : public QWidget
{Q_OBJECTpublic: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();
}
