From 41d900e1a22bdca6d2416a1b68f00d1a87873bc4 Mon Sep 17 00:00:00 2001 From: Liu Zhangjian Date: Wed, 21 May 2025 16:47:15 +0800 Subject: [PATCH] feat: Improve logging across image viewer and processing components - Added detailed debug and warning logs to enhance traceability during image processing, viewer initialization, and user interactions. - Updated logging for file operations, thumbnail generation, and permission checks to facilitate better error handling and debugging. - Enhanced logging in the print helper and rename dialog for improved user feedback. Log: Enhance logging for better debugging and maintainability. --- libimageviewer/imageengine.cpp | 29 +++++++++++++++++++--- libimageviewer/imageviewer.cpp | 29 ++++++++++++++++++++-- libimageviewer/movieservice.cpp | 33 +++++++++++++++++++++++-- libimageviewer/widgets/printhelper.cpp | 17 +++++++++++-- libimageviewer/widgets/renamedialog.cpp | 10 ++++++++ libimageviewer/widgets/toptoolbar.cpp | 14 +++++++---- 6 files changed, 118 insertions(+), 14 deletions(-) diff --git a/libimageviewer/imageengine.cpp b/libimageviewer/imageengine.cpp index 941f0432..26981b35 100644 --- a/libimageviewer/imageengine.cpp +++ b/libimageviewer/imageengine.cpp @@ -35,6 +35,7 @@ class ImageEnginePrivate ImageEnginePrivate::ImageEnginePrivate(ImageEngine *parent) : q_ptr(parent) { + qDebug() << "Initializing image engine private"; Q_Q(ImageEngine); // 关联授权操作通知信号 QObject::connect(PermissionConfig::instance(), &PermissionConfig::authoriseNotify, q, &ImageEngine::sigAuthoriseNotify); @@ -45,9 +46,13 @@ ImageEnginePrivate::ImageEnginePrivate(ImageEngine *parent) //一张缩略图制作完成,发送到主线程 q->connect(m_worker, &LibImgOperate::sigOneImgReady, LibCommonService::instance(), &LibCommonService::slotSetImgInfoByPath); workerThread->start(); + qDebug() << "Image engine worker thread started"; } -ImageEnginePrivate::~ImageEnginePrivate() {} +ImageEnginePrivate::~ImageEnginePrivate() +{ + qDebug() << "Destroying image engine private"; +} ImageEngine *ImageEngine::m_ImageEngine = nullptr; @@ -55,6 +60,7 @@ ImageEngine *ImageEngine::instance(QObject *parent) { Q_UNUSED(parent); if (!m_ImageEngine) { + qDebug() << "Creating new image engine instance"; m_ImageEngine = new ImageEngine(); } return m_ImageEngine; @@ -64,9 +70,13 @@ ImageEngine::ImageEngine(QWidget *parent) : QObject(parent) , d_ptr(new ImageEnginePrivate(this)) { + qDebug() << "Image engine constructed"; } -ImageEngine::~ImageEngine() {} +ImageEngine::~ImageEngine() +{ + qDebug() << "Image engine destroyed"; +} /** @brief 构造传入图像 `paths` 的缩略图到路径 `thumbnailSavePath` , `remake` 标识是否重新创建 @@ -74,16 +84,20 @@ ImageEngine::~ImageEngine() {} */ void ImageEngine::makeImgThumbnail(QString thumbnailSavePath, QStringList paths, int makeCount, bool remake) { + qDebug() << "Making thumbnails for" << paths.size() << "images, save path:" << thumbnailSavePath << "remake:" << remake; //执行子线程制作缩略图动作 Q_UNUSED(makeCount); if (paths.count() > 0) { LibImageDataService::instance()->readThumbnailByPaths(thumbnailSavePath, paths, remake); + } else { + qWarning() << "No paths provided for thumbnail generation"; } } //判断是否图片格式 bool ImageEngine::isImage(const QString &path) { + qDebug() << "Checking if file is image:" << path; bool bRet = false; QMimeDatabase db; QMimeType mt = db.mimeTypeForFile(path, QMimeDatabase::MatchContent); @@ -92,25 +106,31 @@ bool ImageEngine::isImage(const QString &path) mt1.name().startsWith("video/x-mng")) { bRet = true; } + qDebug() << "File" << path << "is" << (bRet ? "an image" : "not an image"); return bRet; } bool ImageEngine::isRotatable(const QString &path) { + qDebug() << "Checking if image is rotatable:" << path; // BUG#93143 //由于底层代码判断是否可旋转的依据是文件名后缀所代表的图片是否可保存 //因此文件是否存在的判断添加在这一层 QFileInfo info(path); if (!info.isFile() || !info.exists() || !info.isWritable()) { + qWarning() << "File cannot be rotated - not a file, doesn't exist, or not writable:" << path; return false; } else { - return LibUnionImage_NameSpace::isImageSupportRotate(path); + bool rotatable = LibUnionImage_NameSpace::isImageSupportRotate(path); + qDebug() << "Image rotation support:" << rotatable; + return rotatable; } } //根据文件路径制作md5 QString ImageEngine::makeMD5(const QString &path) { + qDebug() << "Generating MD5 for file:" << path; QFile file(path); QString stHashValue; if (file.open(QIODevice::ReadOnly)) { //只读方式打开 @@ -120,6 +140,9 @@ QString ImageEngine::makeMD5(const QString &path) buf = buf.append(path.toUtf8()); hash.addData(buf); // 将数据添加到Hash中 stHashValue.append(hash.result().toHex()); + qDebug() << "MD5 generated successfully"; + } else { + qWarning() << "Failed to open file for MD5 generation:" << path; } return stHashValue; } diff --git a/libimageviewer/imageviewer.cpp b/libimageviewer/imageviewer.cpp index 69cb202c..dc9feeb1 100644 --- a/libimageviewer/imageviewer.cpp +++ b/libimageviewer/imageviewer.cpp @@ -51,12 +51,13 @@ ImageViewerPrivate::ImageViewerPrivate(imageViewerSpace::ImgViewerType imgViewer ImageViewer *parent) : q_ptr(parent) { + qDebug() << "Initializing image viewer private, viewer type:" << imgViewerType << "save path:" << savePath; // 初始化检测wayland环境 Libutils::base::initCheckWaylandEnv(); // 在界面前初始化授权配置 if (!qApp) { - qWarning() << qPrintable("Must init authorise config after QApplication initialized!"); + qWarning() << "Must init authorise config after QApplication initialized!"; } else { PermissionConfig::instance()->initFromArguments(qApp->arguments()); } @@ -71,6 +72,7 @@ ImageViewerPrivate::ImageViewerPrivate(imageViewerSpace::ImgViewerType imgViewer QTranslator *translator = new QTranslator(qApp); if (translator->load(finfo.baseName(), finfo.absolutePath())) { qApp->installTranslator(translator); + qDebug() << "Installed translator for:" << finfo.baseName(); } } @@ -84,7 +86,7 @@ ImageViewerPrivate::ImageViewerPrivate(imageViewerSpace::ImgViewerType imgViewer QString translatePath = PLUGINTRANSPATH + translateFilename; if (QFile::exists(translatePath)) { - qDebug() << "translatePath after feedback:" << translatePath; + qDebug() << "Loading translation file:" << translatePath; auto translator = new QTranslator(qApp); translator->load(translatePath); qApp->installTranslator(translator); @@ -104,10 +106,12 @@ ImageViewerPrivate::ImageViewerPrivate(imageViewerSpace::ImgViewerType imgViewer q->setLayout(layout); m_panel = new LibViewPanel(customTopToolbar, q); layout->addWidget(m_panel); + qDebug() << "Image viewer panel initialized"; #ifdef DTKWIDGET_CLASS_DWaterMarkHelper // 设置看图水印,目前仅在主要展示区域显示 if (PermissionConfig::instance()->hasReadWaterMark()) { + qDebug() << "Setting up watermark for image viewer"; auto data = PermissionConfig::instance()->readWaterMarkData(); DWaterMarkHelper::instance()->setData(data); DWaterMarkHelper::instance()->registerWidget(m_panel); @@ -124,6 +128,7 @@ ImageViewerPrivate::ImageViewerPrivate(imageViewerSpace::ImgViewerType imgViewer DWaterMarkWidget *mark = m_panel->findChild(); if (mark) { mark->setVisible(isTargetImage); + qDebug() << "Watermark visibility changed to:" << isTargetImage; } }); } @@ -141,11 +146,13 @@ ImageViewer::ImageViewer(imageViewerSpace::ImgViewerType imgViewerType, : DWidget(parent) , d_ptr(new ImageViewerPrivate(imgViewerType, savePath, customTopToolbar, this)) { + qDebug() << "Image viewer constructed"; Q_INIT_RESOURCE(icons); } ImageViewer::~ImageViewer() { + qDebug() << "Image viewer being destroyed"; //析构时删除m_panel Q_D(ImageViewer); d->m_panel->deleteLater(); @@ -155,12 +162,15 @@ ImageViewer::~ImageViewer() bool ImageViewer::startChooseFileDialog() { + qDebug() << "Starting file choose dialog"; Q_D(ImageViewer); return d->m_panel->startChooseFileDialog(); } bool ImageViewer::startdragImage(const QStringList &paths, const QString &firstPath, bool isCustom, const QString &album) { + qInfo() << "Starting drag image operation with" << paths.size() << "images, first path:" << firstPath + << "is custom:" << isCustom << "album:" << album; Q_D(ImageViewer); d->m_panel->setIsCustomAlbum(isCustom, album); return d->m_panel->startdragImage(paths, firstPath); @@ -169,6 +179,8 @@ bool ImageViewer::startdragImage(const QStringList &paths, const QString &firstP bool ImageViewer::startdragImageWithUID( const QStringList &paths, const QString &firstPath, bool isCustom, const QString &album, int UID) { + qInfo() << "Starting drag image operation with UID:" << UID << "paths:" << paths.size() + << "first path:" << firstPath << "is custom:" << isCustom << "album:" << album; Q_D(ImageViewer); d->m_panel->setIsCustomAlbumWithUID(isCustom, album, UID); return d->m_panel->startdragImage(paths, firstPath); @@ -176,6 +188,7 @@ bool ImageViewer::startdragImageWithUID( void ImageViewer::startImgView(const QString ¤tPath, const QStringList &paths) { + qInfo() << "Starting image view with current path:" << currentPath << "total paths:" << paths.size(); Q_D(ImageViewer); QStringList realPaths = paths; @@ -188,6 +201,7 @@ void ImageViewer::startImgView(const QString ¤tPath, const QStringList &pa //启动线程制作缩略图 if (LibCommonService::instance()->getImgViewerType() == imageViewerSpace::ImgViewerTypeLocal || LibCommonService::instance()->getImgViewerType() == imageViewerSpace::ImgViewerTypeNull) { + qDebug() << "Generating thumbnails for local image viewer"; //首先生成当前图片的缓存 ImageEngine::instance()->makeImgThumbnail(LibCommonService::instance()->getImgSavePath(), QStringList(realPath), 1); //看图制作全部缩略图 @@ -197,12 +211,14 @@ void ImageViewer::startImgView(const QString ¤tPath, const QStringList &pa void ImageViewer::switchFullScreen() { + qDebug() << "Switching fullscreen mode"; Q_D(ImageViewer); d->m_panel->toggleFullScreen(); } void ImageViewer::startSlideShow(const QStringList &paths, const QString &firstPath) { + qInfo() << "Starting slideshow with" << paths.size() << "images, first path:" << firstPath; Q_D(ImageViewer); ViewInfo info; @@ -218,6 +234,7 @@ void ImageViewer::startSlideShow(const QStringList &paths, const QString &firstP void ImageViewer::setTopBarVisible(bool visible) { + qDebug() << "Setting top bar visibility:" << visible; Q_D(ImageViewer); if (d->m_panel) { d->m_panel->setTopBarVisible(visible); @@ -226,6 +243,7 @@ void ImageViewer::setTopBarVisible(bool visible) void ImageViewer::setBottomtoolbarVisible(bool visible) { + qDebug() << "Setting bottom toolbar visibility:" << visible; Q_D(ImageViewer); if (d->m_panel) { d->m_panel->setBottomtoolbarVisible(visible); @@ -234,6 +252,7 @@ void ImageViewer::setBottomtoolbarVisible(bool visible) DIconButton *ImageViewer::getBottomtoolbarButton(imageViewerSpace::ButtonType type) { + qDebug() << "Getting bottom toolbar button of type:" << type; DIconButton *button = nullptr; Q_D(ImageViewer); if (d->m_panel) { @@ -248,12 +267,14 @@ QString ImageViewer::getCurrentPath() QString path; if (d->m_panel) { path = d->m_panel->getCurrentPath(); + qDebug() << "Getting current path:" << path; } return path; } void ImageViewer::setViewPanelContextMenuItemVisible(imageViewerSpace::NormalMenuItemId id, bool visible) { + qDebug() << "Setting context menu item visibility, id:" << id << "visible:" << visible; Q_D(ImageViewer); if (d->m_panel) { d->m_panel->setContextMenuItemVisible(id, visible); @@ -262,6 +283,7 @@ void ImageViewer::setViewPanelContextMenuItemVisible(imageViewerSpace::NormalMen void ImageViewer::setBottomToolBarButtonAlawysNotVisible(imageViewerSpace::ButtonType id, bool notVisible) { + qDebug() << "Setting bottom toolbar button always not visible, id:" << id << "not visible:" << notVisible; Q_D(ImageViewer); if (d->m_panel) { d->m_panel->setBottomToolBarButtonAlawysNotVisible(id, notVisible); @@ -270,6 +292,7 @@ void ImageViewer::setBottomToolBarButtonAlawysNotVisible(imageViewerSpace::Butto void ImageViewer::setCustomAlbumName(const QMap map, bool isFav) { + qDebug() << "Setting custom album names, is favorite:" << isFav; Q_D(ImageViewer); if (d->m_panel) { d->m_panel->updateCustomAlbum(map, isFav); @@ -278,6 +301,7 @@ void ImageViewer::setCustomAlbumName(const QMap map, bool isFav) void ImageViewer::setCustomAlbumNameAndUID(const QMap > &map, bool isFav) { + qDebug() << "Setting custom album names with UID, is favorite:" << isFav; Q_D(ImageViewer); if (d->m_panel) { d->m_panel->updateCustomAlbumAndUID(map, isFav); @@ -286,6 +310,7 @@ void ImageViewer::setCustomAlbumNameAndUID(const QMapm_panel) { d->m_panel->setAcceptDrops(enable); diff --git a/libimageviewer/movieservice.cpp b/libimageviewer/movieservice.cpp index 2201ba79..de9ddce3 100644 --- a/libimageviewer/movieservice.cpp +++ b/libimageviewer/movieservice.cpp @@ -45,6 +45,7 @@ MovieService *MovieService::instance(QObject *parent) //线程安全单例 std::call_once(instanceFlag, [&]() { m_movieService = new MovieService; + qDebug() << "Created MovieService singleton instance"; }); return m_movieService; } @@ -52,27 +53,32 @@ MovieService *MovieService::instance(QObject *parent) MovieService::MovieService(QObject *parent) : QObject(parent) { + qDebug() << "Initializing MovieService"; //检查ffmpeg是否存在 if (Libutils::base::checkCommandExist("ffmpeg")) { resolutionPattern = "[0-9]+x[0-9]+"; codeRatePattern = "[0-9]+\\skb/s"; fpsPattern = "[0-9]+\\sfps"; m_ffmpegExist = true; + qDebug() << "FFmpeg found and initialized"; } //检查ffmpegthumbnailer是否存在 if (Libutils::base::checkCommandExist("ffmpegthumbnailer")) { m_ffmpegthumbnailerExist = true; + qDebug() << "FFmpegthumbnailer found"; } //检查ffmpegthumbnailerlib是否存在 if (initFFmpegVideoThumbnailer()) { m_ffmpegThumLibExist = true; + qDebug() << "FFmpegVideoThumbnailer library initialized"; } } MovieInfo MovieService::getMovieInfo(const QUrl &url) { + qDebug() << "Getting movie info for:" << url.toString(); MovieInfo result; m_bufferMutex.lock(); @@ -81,6 +87,7 @@ MovieInfo MovieService::getMovieInfo(const QUrl &url) }); if (iter != m_movieInfoBuffer.end()) { m_bufferMutex.unlock(); + qInfo() << "Found cached movie info for:" << url.toString(); return iter->second; } m_bufferMutex.unlock(); @@ -88,7 +95,10 @@ MovieInfo MovieService::getMovieInfo(const QUrl &url) if (url.isLocalFile()) { QFileInfo fi(url.toLocalFile()); if (fi.exists() && fi.permission(QFile::Permission::ReadOwner)) { //存在且有读权限才能导入 + qInfo() << "Parsing movie info from file:" << fi.absoluteFilePath(); result = parseFromFile(fi); + } else { + qWarning() << "Cannot read movie file:" << fi.absoluteFilePath() << "exists:" << fi.exists() << "readable:" << fi.permission(QFile::Permission::ReadOwner); } } @@ -177,17 +187,28 @@ MovieInfo MovieService::parseFromFile(const QFileInfo &fi) QImage MovieService::getMovieCover(const QUrl &url, const QString &savePath) { + qInfo() << "Getting movie cover for:" << url.toString(); QImage image; if (m_ffmpegThumLibExist) { + qDebug() << "Using FFmpegVideoThumbnailer library to get cover"; image = getMovieCover_ffmpegthumbnailerlib(url); if (!image.isNull()) { + qDebug() << "Successfully got cover using FFmpegVideoThumbnailer library"; return image; } } if (image.isNull() && m_ffmpegthumbnailerExist) { + qDebug() << "Using ffmpegthumbnailer to get cover"; image = getMovieCover_ffmpegthumbnailer(url, savePath); + if (!image.isNull()) { + qInfo() << "Successfully got cover using ffmpegthumbnailer"; + } + } + + if (image.isNull()) { + qWarning() << "Failed to get movie cover for:" << url.toString(); } return image; @@ -274,9 +295,11 @@ std::vector> searchGroupFromKey(const QString &key, MovieInfo MovieService::getMovieInfo_ffmpeg(const QFileInfo &fi) { + qInfo() << "Getting movie info using ffmpeg for:" << fi.absoluteFilePath(); struct MovieInfo mi; if (!m_ffmpegExist) { + qWarning() << "FFmpeg not available"; mi.valid = false; return mi; } @@ -287,14 +310,15 @@ MovieInfo MovieService::getMovieInfo_ffmpeg(const QFileInfo &fi) try { QProcess ffmpeg; QStringList cmds{"-i", filePath, "-hide_banner"}; + qInfo() << "Running ffmpeg command:" << cmds.join(" "); ffmpeg.start("ffmpeg", cmds, QIODevice::ReadOnly); if (!ffmpeg.waitForFinished()) { - qWarning() << ffmpeg.errorString(); + qWarning() << "FFmpeg process failed:" << ffmpeg.errorString(); return mi; } output = ffmpeg.readAllStandardError(); //ffmpeg的视频基础信息是打在标准错误里面的,读标准输出是读不到东西的 } catch (std::logic_error &e) { - qWarning() << e.what(); + qWarning() << "FFmpeg process exception:" << e.what(); return mi; } @@ -304,11 +328,13 @@ MovieInfo MovieService::getMovieInfo_ffmpeg(const QFileInfo &fi) QString ffmpegOut = QString::fromUtf8(output); if (ffmpegOut.endsWith("Invalid data found when processing input\n") || ffmpegOut.endsWith("Permission denied\n")) { + qWarning() << "Invalid input or permission denied for:" << filePath; return mi; } //2.解析数据 mi.valid = true; + qDebug() << "Successfully parsed movie info using ffmpeg"; //2.1.文件信息 mi.filePath = filePath; @@ -448,6 +474,7 @@ QJsonObject MovieService::getMovieInfoByJson(const QUrl &url) MovieInfo MovieService::getMovieInfo_mediainfo(const QFileInfo &fi) { + qInfo() << "Getting movie info using MediaInfo for:" << fi.absoluteFilePath(); struct MovieInfo mi; MediaInfoDLL::MediaInfo info; @@ -471,8 +498,10 @@ MovieInfo MovieService::getMovieInfo_mediainfo(const QFileInfo &fi) if (!videoGroup.empty()) { mi.valid = true; + qDebug() << "Successfully parsed movie info using MediaInfo"; } else { mi.valid = false; + qWarning() << "No video stream found in:" << fi.absoluteFilePath(); return mi; } diff --git a/libimageviewer/widgets/printhelper.cpp b/libimageviewer/widgets/printhelper.cpp index 81dd7cf6..03cefb87 100755 --- a/libimageviewer/widgets/printhelper.cpp +++ b/libimageviewer/widgets/printhelper.cpp @@ -45,7 +45,9 @@ PrintHelper::~PrintHelper() void PrintHelper::showPrintDialog(const QStringList &paths, QWidget *parent) { + qInfo() << "Opening print dialog for" << paths.size() << "images"; if (!PermissionConfig::instance()->isPrintable()) { + qWarning() << "Printing not allowed by permission config"; return; } @@ -57,6 +59,7 @@ void PrintHelper::showPrintDialog(const QStringList &paths, QWidget *parent) QString errMsg; QImageReader imgReadreder(path); if (imgReadreder.imageCount() > 1) { + qInfo() << "Loading multi-page image:" << path << "with" << imgReadreder.imageCount() << "pages"; for (int imgindex = 0; imgindex < imgReadreder.imageCount(); imgindex++) { imgReadreder.jumpToImage(imgindex); m_re->appendImage(imgReadreder.read()); @@ -67,6 +70,8 @@ void PrintHelper::showPrintDialog(const QStringList &paths, QWidget *parent) LibUnionImage_NameSpace::loadStaticImageFromFile(path, img, errMsg); if (!img.isNull()) { m_re->appendImage(img); + } else { + qWarning() << "Failed to load image:" << path << "Error:" << errMsg; } } tempExsitPaths << paths; @@ -88,11 +93,12 @@ void PrintHelper::showPrintDialog(const QStringList &paths, QWidget *parent) #ifdef DTKWIDGET_CLASS_DWaterMarkHelper // 检查是否过滤 DTK 部分设置 if (PermissionConfig::instance()->installFilterPrintDialog(&printDialog2)) { - qInfo() << qPrintable("Enable breakPrintSpacingLimit, filter print spacing config."); + qInfo() << "Enable breakPrintSpacingLimit, filter print spacing config"; } // 定制分支,水印功能不依赖DTK版本,更新打印水印设置 if (PermissionConfig::instance()->hasPrintWaterMark()) { + qInfo() << "Setting print watermark"; PermissionConfig::instance()->setDialogPrintWatermark(&printDialog2); } #endif @@ -114,8 +120,11 @@ void PrintHelper::showPrintDialog(const QStringList &paths, QWidget *parent) if (QDialog::Accepted == ret) { #endif if (!tempExsitPaths.isEmpty()) { + qInfo() << "Printing completed for image:" << tempExsitPaths.first(); PermissionConfig::instance()->triggerPrint(tempExsitPaths.first()); } + } else { + qInfo() << "Print operation cancelled"; } m_re->clearPrintState(); @@ -156,6 +165,7 @@ void RequestedSlot::appendImage(const QImage &img) */ void RequestedSlot::paintRequestSync(DPrinter *_printer) { + qInfo() << "Painting" << m_imgs.size() << "images for printing"; // 由于之前再度修改了打印的逻辑,导致了相同图片不在被显示,多余多页tiff来说不合理 QPainter painter(_printer); int indexNum = 0; @@ -166,7 +176,7 @@ void RequestedSlot::paintRequestSync(DPrinter *_printer) QRect wRect = _printer->pageRect(QPrinter::DevicePixel).toRect(); // 修复bug98129,打印不完全问题,ratio应该是适应宽或者高,不应该直接适应宽 qreal ratio = 0.0; - qDebug() << wRect; + qDebug() << "Page rect:" << wRect; ratio = wRect.width() * 1.0 / img.width(); if (qreal(wRect.height() - img.height() * ratio) > 0) { painter.drawImage( @@ -176,6 +186,8 @@ void RequestedSlot::paintRequestSync(DPrinter *_printer) painter.drawImage(QRectF(qreal(wRect.width() - img.width() * ratio) / 2, 0, img.width() * ratio, wRect.height()), img); } + } else { + qWarning() << "Skipping null image at index" << indexNum; } indexNum++; if (indexNum != m_imgs.size()) { @@ -186,5 +198,6 @@ void RequestedSlot::paintRequestSync(DPrinter *_printer) if (!m_printed && 0 != indexNum) { m_printed = true; + qInfo() << "Successfully painted" << indexNum << "images for printing"; } } diff --git a/libimageviewer/widgets/renamedialog.cpp b/libimageviewer/widgets/renamedialog.cpp index 3d07b3d7..25b2b7f0 100644 --- a/libimageviewer/widgets/renamedialog.cpp +++ b/libimageviewer/widgets/renamedialog.cpp @@ -24,6 +24,7 @@ RenameDialog::RenameDialog(const QString &filename, QWidget *parent) : DDialog(parent) , m_filenamepath(filename) { + qDebug() << "Opening rename dialog for file:" << filename; this->setIcon(QIcon::fromTheme("deepin-image-viewer")); DWidget *widet = new DWidget(this); this->setContentsMargins(0, 0, 0, 0); @@ -141,11 +142,13 @@ RenameDialog::RenameDialog(const QString &filename, QWidget *parent) QString RenameDialog::GetFilePath() { + qDebug() << "Getting new file path:" << m_filenamepath; return m_filenamepath; } QString RenameDialog::GetFileName() { + qDebug() << "Getting new file name:" << m_filename; return m_filename; } @@ -158,6 +161,7 @@ void RenameDialog::InitDlg() QString basename; // basename会过滤掉.,那么1.....png就会出现basename为1,completeBaseName不会,修改bug66356 m_basename = fileinfo.completeBaseName(); + qDebug() << "Initializing rename dialog - Directory:" << m_DirPath << "Base name:" << m_basename << "Format:" << format; m_lineedt->setText(m_basename); m_labformat->setText("." + format); } @@ -167,16 +171,20 @@ void RenameDialog::setCurrentTip() QString fileabname = m_DirPath + "/" + m_lineedt->text() + m_labformat->text(); QFile file(fileabname); if (m_filenamepath == fileabname) { + qDebug() << "New filename same as original, enabling confirm button"; okbtn->setEnabled(true); m_lineedt->hideAlertMessage(); } else if (file.exists()) { + qWarning() << "File already exists:" << fileabname; okbtn->setEnabled(false); m_lineedt->setAlert(true); m_lineedt->showAlertMessage(tr("The file already exists, please use another name"), m_lineedt); } else if (m_lineedt->text().isEmpty()) { + qDebug() << "New filename is empty, disabling confirm button"; okbtn->setEnabled(false); m_lineedt->hideAlertMessage(); } else { + qDebug() << "New filename is valid:" << fileabname; okbtn->setEnabled(true); m_lineedt->hideAlertMessage(); } @@ -206,6 +214,7 @@ void RenameDialog::slotsFocusChanged(bool onFocus) void RenameDialog::onThemeChanged(DGuiApplicationHelper::ColorType theme) { + qDebug() << "Theme changed to:" << (theme == DGuiApplicationHelper::ColorType::DarkType ? "Dark" : "Light"); // 文件后缀颜色跟随主题变化 QPalette palette = m_labformat->palette(); if (theme == DGuiApplicationHelper::ColorType::DarkType) { @@ -220,5 +229,6 @@ void RenameDialog::onThemeChanged(DGuiApplicationHelper::ColorType theme) void RenameDialog::slotsUpdate() { + qDebug() << "Updating rename dialog state"; setCurrentTip(); } diff --git a/libimageviewer/widgets/toptoolbar.cpp b/libimageviewer/widgets/toptoolbar.cpp index be43aa85..4eab1b12 100644 --- a/libimageviewer/widgets/toptoolbar.cpp +++ b/libimageviewer/widgets/toptoolbar.cpp @@ -59,6 +59,7 @@ int paintBrushHeight() LibTopToolbar::LibTopToolbar(bool manager, QWidget *parent) : AbstractTopToolbar(parent) { + qInfo() << "Initializing top toolbar, manager mode:" << manager; m_manager = manager; QPalette palette; palette.setColor(QPalette::Window, QColor(0, 0, 0, 0)); // 最后一项为透明度 @@ -69,6 +70,7 @@ LibTopToolbar::LibTopToolbar(bool manager, QWidget *parent) void LibTopToolbar::setMiddleContent(const QString &path) { + qDebug() << "Setting middle content:" << path; //保存当前名称 m_filename = path; //修复名字过长显示不完整bug @@ -81,6 +83,7 @@ void LibTopToolbar::setMiddleContent(const QString &path) void LibTopToolbar::setTitleBarTransparent(bool a) { + qDebug() << "Setting title bar transparency:" << a; m_viewChange = a; DGuiApplicationHelper::ColorType themeType = DGuiApplicationHelper::instance()->themeType(); @@ -90,12 +93,10 @@ void LibTopToolbar::setTitleBarTransparent(bool a) shadowEffect->setOffset(0, 1); shadowEffect->setBlurRadius(1); m_titletxt->setGraphicsEffect(shadowEffect); - // if (themeType == DGuiApplicationHelper::LightType) { pa1.setColor(QPalette::ButtonText, QColor(255, 255, 255, 204)); pa2.setColor(QPalette::WindowText, QColor(255, 255, 255, 204)); m_titlebar->setPalette(pa1); m_titletxt->setPalette(pa2); - } else { m_titlebar->setBackgroundTransparent(false); shadowEffect->setOffset(0, 0); @@ -118,6 +119,7 @@ void LibTopToolbar::setTitleBarTransparent(bool a) void LibTopToolbar::mouseDoubleClickEvent(QMouseEvent *e) { if (e->button() == Qt::LeftButton) { + qDebug() << "Title bar double clicked, current window state:" << (window()->isMaximized() ? "maximized" : "normal"); if (window()->isMaximized()) window()->showNormal(); else if (! window()->isFullScreen()) // It would be normal state @@ -142,6 +144,7 @@ void LibTopToolbar::paintEvent(QPaintEvent *e) void LibTopToolbar::resizeEvent(QResizeEvent *event) { + qDebug() << "Resizing top toolbar to width:" << width(); //在resize的时候,需要重新计算大小 if (m_filename != "") { QString b = geteElidedText(DFontSizeManager::instance()->get(DFontSizeManager::T7), @@ -155,12 +158,14 @@ void LibTopToolbar::resizeEvent(QResizeEvent *event) void LibTopToolbar::leaveEvent(QEvent *event) { + qDebug() << "Mouse left title bar area"; emit sigLeaveTitle(); return AbstractTopToolbar::leaveEvent(event); } void LibTopToolbar::initWidgets() { + qDebug() << "Initializing top toolbar widgets"; m_layout = new QHBoxLayout(this); m_layout->setContentsMargins(0, 0, 0, 0); m_layout->setSpacing(0); @@ -174,6 +179,7 @@ void LibTopToolbar::initWidgets() pa.setColor(QPalette::WindowText, QColor(255, 255, 255, 255)); QObject::connect(DGuiApplicationHelper::instance(), &DGuiApplicationHelper::themeTypeChanged, this, [ = ]() { + qDebug() << "Theme type changed"; DGuiApplicationHelper::ColorType themeType = DGuiApplicationHelper::instance()->themeType(); QPalette pa1, pa2; @@ -191,7 +197,6 @@ void LibTopToolbar::initWidgets() } }); - m_titlebar->setPalette(pa); m_titlebar->setTitle(""); m_titletxt = new DLabel; @@ -207,8 +212,6 @@ void LibTopToolbar::initWidgets() m_titlebar->addWidget(m_titletxt, Qt::AlignCenter); m_layout->addWidget(m_titlebar); - -// connect(dApp->signalM, &SignalManager::updateFileName, this, &TopToolbar::onUpdateFileName); } QString LibTopToolbar::geteElidedText(QFont font, QString str, int MaxWidth) @@ -246,6 +249,7 @@ QString LibTopToolbar::geteElidedText(QFont font, QString str, int MaxWidth) void LibTopToolbar::initMenu() { + qDebug() << "Initializing top toolbar menu"; m_menu = new DMenu(this); m_menu->addSeparator(); }