#include "mainwindow.h"
#include "ui_mainwindow.h"
#include "core.h"
#include "copymovefiledialog.h"
#include "resultlistitem.h"
#include <QApplication>
#include <QDateTime>
#include <QDebug>
#include <QRect>
#include <QThread>
#include <QDesktopWidget>
#include <QGuiApplication>
#include <QScreen>
#include <QFileIconProvider>
#include <QFileInfo>
#include <QUrl>
#include <QDesktopServices>
#include <QClipboard>
#include <QMimeData>
#include <QFileDialog>
#include <QStandardPaths>
#include <QMessageBox>
#include <QDir>
#include <QtNetwork>
#include <QSize>
const char checkUpdateUrl[] = "https://gitee.com/brok1n/bsearch/raw/master/Api/checkUpdate.json";
const char checkUpdateBakUrl[] = "https://raw.githubusercontent.com/brok1n/bsearch/master/Api/checkUpdate.json";
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
, mWaitResultTimer(new QTimer())
, mWaitScanDiskTimer(new QTimer())
, mTimeTimer(new QTimer())
, mAboutDialog(nullptr)
, reply(nullptr)
, mContextMenu(nullptr)
, mStatusMsgLabel(nullptr)
, mStatusTimeLabel(nullptr)
{
this->ui->setupUi(this);
mDefaultIconSize = this->ui->listWidget->iconSize();
// this->ui->listWidget->setIconSize(QSize(24, 24));
connect(this->ui->listWidget, SIGNAL(itemClicked(QListWidgetItem*)), this, SLOT(onListWidgetItemClicked(QListWidgetItem*)));
// ------ 新建窗口 ------
//如果窗口数量 > 0
int controlPanelCount = Core::GetInstance()->controlPanelCount();
if(controlPanelCount > 0)
{
//获取可用桌面大小
QScreen *screen = QGuiApplication::screenAt(this->pos());
QRect deskRect = screen->availableGeometry();
this->setGeometry(deskRect.width() / 2 - width() / 2 + controlPanelCount * 30, deskRect.height() / 2 - height() / 2 + controlPanelCount * 30, width(), height());
//多窗口时,让子窗口被关闭后自动释放
setAttribute(Qt::WA_DeleteOnClose);
}
mPanelId = QDateTime::currentDateTime().toMSecsSinceEpoch();
if(!Core::GetInstance()->addControlPanel(mPanelId))
{
QThread::msleep(10);
mPanelId = QDateTime::currentDateTime().toMSecsSinceEpoch();
Core::GetInstance()->addControlPanel(mPanelId);
}
// ------ 新建窗口 ------
connect(mWaitScanDiskTimer, SIGNAL(timeout()), this, SLOT(onScanDiskFinished()));
mWaitScanDiskTimer->start(1000);
showMsg("正在扫描磁盘...");
// this->ui->statusbar->showMessage("正在扫描磁盘...");
QString desktopFileName = QApplication::desktopFileName();
qDebug() << "desktopFileName:" << desktopFileName;
QString applicationDisplayName = QApplication::applicationDisplayName();
qDebug() << "applicationDisplayName:" << applicationDisplayName;
QString platformName = QApplication::platformName();
qDebug() << "platformName:" << platformName;
switch (DataCenter::GetInstance()->sortType()) {
case SORT_TYPE::BY_NAME:
this->ui->actionSortName->setChecked(true);
break;
case SORT_TYPE::BY_SIZE:
this->ui->actionSortSize->setChecked(true);
break;
case SORT_TYPE::BY_PATH:
this->ui->actionSortPath->setChecked(true);
break;
case SORT_TYPE::BY_TYPE:
this->ui->actionSortType->setChecked(true);
break;
case SORT_TYPE::BY_EXT:
this->ui->actionSortExt->setChecked(true);
break;
case SORT_TYPE::BY_CTIME:
this->ui->actionSortCreateTime->setChecked(true);
break;
case SORT_TYPE::BY_MTIME:
this->ui->actionSortModifyTime->setChecked(true);
break;
}
switch (DataCenter::GetInstance()->sortOrder()) {
case SORT_ORDER::SORT_ASC:
this->ui->actionSortAsc->setChecked(true);
break;
case SORT_ORDER::SORT_DESC:
this->ui->actionSortDesc->setChecked(true);
break;
}
// ------ 版本更新相关 ------
//#ifndef QT_NO_SSL
connect(&qnam, &QNetworkAccessManager::sslErrors,
this, &MainWindow::sslErrors);
//#endif
// ------ 版本更新相关 ------
// ------ 右键菜单 ------
mContextMenu = new QMenu( this );
QAction *openAction = new QAction(tr("打开文件"), this);
QAction *openFolder = new QAction(tr("打开所在目录"), this);
QAction *copyToDesktop = new QAction(tr("复制到桌面"), this);
QAction *copyToFolder = new QAction(tr("复制到..."), this);
QAction *moveToFolder = new QAction(tr("移动到..."), this);
mContextMenu->addAction( openAction );
mContextMenu->addAction( openFolder );
mContextMenu->addSeparator();
mContextMenu->addAction( copyToDesktop );
mContextMenu->addAction( copyToFolder );
mContextMenu->addAction( moveToFolder );
connect( openAction, SIGNAL(triggered() ), this, SLOT( on_actionOpenFile_triggered()) );
connect( openFolder, SIGNAL(triggered() ), this, SLOT( on_actionOpenInFolder_triggered()) );
connect( copyToDesktop, SIGNAL(triggered() ), this, SLOT( on_actionCopyToDesktop_triggered()) );
connect( copyToFolder, SIGNAL(triggered() ), this, SLOT( on_actionCopyTo_triggered()) );
connect( moveToFolder, SIGNAL(triggered() ), this, SLOT( on_actionMoveTo_triggered()) );
// ------ 右键菜单 ------
// ------ 状态栏 ------
// ---- 消息 ----
mStatusMsgLabel = new QLabel;
mStatusMsgLabel->setAlignment(Qt::AlignCenter);
mStatusMsgLabel->setMinimumSize(mStatusMsgLabel->sizeHint());
ui->statusbar->addWidget(mStatusMsgLabel, 1);
// ---- 消息 ----
// ---- 文件数 ----
mStatusFileCountLabel = new QLabel;
mStatusFileCountLabel->setAlignment(Qt::AlignCenter);
mStatusFileCountLabel->setMinimumSize(mStatusFileCountLabel->sizeHint());
ui->statusbar->addWidget(mStatusFileCountLabel);
// ---- 文件数 ----
// ---- 时间 ----
mStatusTimeLabel = new QLabel;
mStatusTimeLabel->setAlignment(Qt::AlignCenter);
mStatusTimeLabel->setMinimumSize(mStatusTimeLabel->sizeHint());
ui->statusbar->addWidget(mStatusTimeLabel);
connect(mTimeTimer, SIGNAL(timeout()), this, SLOT(timeUpdate()));
mTimeTimer->start(1000);
timeUpdate();
// ---- 时间 ----
// ------ 状态栏 ------
// mContextMenu->exec( QCursor::pos() );
}
MainWindow::~MainWindow()
{
qDebug() << "窗口析构函数:" << mPanelId;
mAboutDialog->deleteLater();
Core::GetInstance()->releaseControlPanel(mPanelId);
mWaitResultTimer->stop();
delete mWaitResultTimer;
mWaitScanDiskTimer->stop();
delete mWaitScanDiskTimer;
delete ui;
qDebug() << "窗口析构函数:" << mPanelId << ":end.";
}
void MainWindow::on_keyEdit_returnPressed()
{
startSearch();
}
void MainWindow::onSearchFinished()
{
if(DataCenter::GetInstance()->isSearchFinished())
{
disconnect(mWaitResultTimer, SIGNAL(timeout()), this, SLOT(onSearchFinished()));
mWaitResultTimer->stop();
flushResult();
qDebug() << "搜索完毕!";
}
}
void MainWindow::onScanDiskFinished()
{
if(DataCenter::GetInstance()->isScanDiskFinished())
{
disconnect(mWaitScanDiskTimer, SIGNAL(timeout()), this, SLOT(onScanDiskFinished()));
mWaitScanDiskTimer->stop();
showMsg("磁盘扫描完毕!");
mStatusFileCountLabel->setText(QString("文件数:%1 文件夹数:%1").arg(DataCenter::GetInstance()->fileCount()).arg(DataCenter::GetInstance()->dirCount()));
// this->ui->statusbar->showMessage("磁盘扫描完毕!");
}
}
void MainWindow::onListWidgetItemClicked(QListWidgetItem *item)
{
QString txt = item->text();
QString fullPath = item->data(Qt::UserRole).toString();
qDebug() << "点击了:" << txt << " fullPath:" << fullPath;
}
void MainWindow::flushResult()
{
QList<Node*> *resultList = DataCenter::GetInstance()->resultList();
QElapsedTimer flushTimer;
flushTimer.start();
th
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
本资源中的源码都是经过本地编译过可运行的,下载后按照文档配置好环境就可以运行。资源项目的难度比较适中,内容都是经过助教老师审定过的,应该能够满足学习、使用需求,如果有需要的话可以放心下载使用。有任何问题也可以随时私信博主,博主会第一时间给您解答!!! 本资源中的源码都是经过本地编译过可运行的,下载后按照文档配置好环境就可以运行。资源项目的难度比较适中,内容都是经过助教老师审定过的,应该能够满足学习、使用需求,如果有需要的话可以放心下载使用。有任何问题也可以随时私信博主,博主会第一时间给您解答!!! 本资源中的源码都是经过本地编译过可运行的,下载后按照文档配置好环境就可以运行。资源项目的难度比较适中,内容都是经过助教老师审定过的,应该能够满足学习、使用需求,如果有需要的话可以放心下载使用。有任何问题也可以随时私信博主,博主会第一时间给您解答!!!
资源推荐
资源详情
资源评论
收起资源包目录
基于C++&Qt开发的文件搜索及文本内容搜索软件,支持Windows、Linux、Mac系统.zip (60个子文件)
bsearch-master
Core
pathindexrunnable.cpp 3KB
partitionindexthread.h 472B
common.cpp 1KB
datacenter.h 2KB
searchthread.cpp 2KB
Core_zh_CN.ts 99B
indexthread.h 403B
searchmanager.cpp 7KB
datacenter.cpp 3KB
indexmanager.cpp 994B
core.cpp 3KB
preferences.cpp 91B
indexthread.cpp 3KB
searchmanager.h 429B
common.h 9KB
preferences.h 215B
searchthread.h 518B
partitionindexthread.cpp 6KB
Core.pri 667B
.gitignore 741B
indexmanager.h 511B
core.h 1KB
pathindexrunnable.h 600B
Core.pro 512B
Core_global.h 210B
Api
checkUpdate.json 229B
checkUpdate.json.md 875B
Ui
bsearch_icon_256.ico 4KB
bsearch_icon_256.png 20KB
bsearch_icon.png 19KB
bsearch_icon.psd 717KB
Gui
mainwindow.h 3KB
copymovefiledialog.h 2KB
Gui.pro 1KB
resultlistitem.cpp 693B
bsearch_icon_256.png 20KB
copymovefiledialog.ui 12KB
aboutdialog.ui 4KB
mainwindow.cpp 28KB
resultlistitem.ui 1KB
bsearch.ico 4KB
ccrashstack.h 542B
main.cpp 1KB
mainwindow.ui 12KB
ok.png 538B
aboutdialog.h 345B
Gui_zh_CN.ts 98B
diff.png 223B
back.png 604B
.gitignore 741B
res.qrc 223B
aboutdialog.cpp 372B
ccrashstack.cpp 7KB
copymovefiledialog.cpp 7KB
resultlistitem.h 365B
Console
Console.pro.user 24KB
Console.pro 546B
main.cpp 124B
Console_zh_CN.ts 102B
.gitignore 8B
共 60 条
- 1
资源评论
白话机器学习
- 粉丝: 8260
- 资源: 7686
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功