El proyecto de detección de archivos duplicados QT completa principalmente la detección de todos los archivos bajo una ruta y completa la identificación de archivos duplicados leyendo el valor del atributo único Md5 de cada archivo.
Los principales puntos de conocimiento involucrados en este proyecto son:
1. Arrastra y suelta ventanas sin bordes, sombras
(1) Funciones del sistema de llamada
//主要完成去除系统默认边框,将自己定义的Widght加边框以及退出,放大缩小按钮
//去掉系统边框
this->setWindowFlags(Qt::FramelessWindowHint);
//阴影边框类
QGraphicsDropShadowEffect *shadow = new QGraphicsDropShadowEffect();
(2). Realice varios eventos de movimiento del mouse, haga clic y suelte. Al reescribir, recuerde cargar la función antes que la clase principal
void Widget::mouseMoveEvent(QMouseEvent *event)
{
//调用父类的对应函数,
QWidget::mouseMoveEvent(event);
QPoint Mouus_Point = event->globalPos();
QPoint Move_Point = Mouus_Point - Qpo_StadardPoint;//计算获取程序窗口距离桌面左上角的位置
this->move(Move_Point);//将窗口移动到这个位置
}
void Widget::mousePressEvent(QMouseEvent *event)
{
QWidget::mousePressEvent(event);
QPoint Mouus_Point = event->globalPos();//获取鼠标距离桌面左上角的位置
QPoint Widgt_Point = this->geometry().topLeft();//获取程序窗口左上角距离桌面左上角的位置
this->Qpo_StadardPoint = Mouus_Point - Widgt_Point;
}
void Widget::mouseReleaseEvent(QMouseEvent *event)
{
QWidget::mouseReleaseEvent(event);
this->Qpo_StadardPoint = QPoint();//重置
}
(3) La realización del evento de clic de botón cuando la ventana está maximizada o minimizada,
//按钮的关闭,最大,最小化
void Widget::on_btnClose_clicked()
{
this->close();
}
void Widget::on_btnMax_clicked()
{
if(this->isMaximized())
{
ui->vMain->setMargin(9);//设置边框阴影
this->showNormal();
}
else
{
ui->vMain->setMargin(0);//设置边框阴影
this->showMaximized();
}
}
void Widget::on_btnMin_clicked()
{
this->showMinimized();
}
2. El uso de algunos controles
El uso de diseño, algunos tipos de QT (el uso de QByteArray, QHash, QString, etc.)
3. Señales y ranuras
(1) Simplemente use señales para llamar a funciones de tragamonedas
(2) Transmita el valor a la función de ranura a través de la señal para su procesamiento.
4. El uso de subprocesos (subprocesos que procesan subprocesos de UI y acciones de detección de archivos, y la transmisión de los resultados de la señal entre subprocesos se realiza a través de señales y ranuras)
Solo usado temporalmente
//开启线程
thread.start();
md5.moveToThread(&thread);//利用moveToThread方式将md5这个类加入到该线程中,则md5对象的操作都是在这个线程中操作了。
5. La producción de una biblioteca dinámica y la finalización de un paso del proceso llamado,
Debe agregar esto en el proyecto .pro que llama a la biblioteca dinámica (para encontrar la biblioteca dinámica), y debe colocar el archivo de biblioteca dinámica y sus archivos de encabezado de soporte, archivos de enlace y usar el directorio a continuación para encontrar
# -L表示目录, -l表示库的名字,会自动寻找 lib + 库名 + .a的文件
LIBS += -L. -lShowLib1