Files
picpanel/core_form/frmimgshow/frmimgshow.cpp
2025-03-27 00:56:01 +08:00

216 lines
6.4 KiB
C++

#include "frmimgshow.h"
#include "frmalbum.h"
FrmImgShow::FrmImgShow(QWidget *parent) : QWidget(parent)
{
initForm();
initSignalSlot();
connect(TCHttpService::getInstance(), &TCHttpService::signal_imageDownloaded,
this, [this](const QString& requestId, const QPixmap& pixmap){
if (requestId == m_requestId) {
setImage(pixmap);
}
});
connect(TCHttpService::getInstance(), &TCHttpService::signal_downloadFailed,
this, [this](const QString& requestId){
if (requestId == m_requestId) {
qDebug() << "load failed";
}
});
}
void FrmImgShow::loadImage(const QUrl &imageUrl)
{
m_currentUrl = imageUrl;
m_requestId = QUuid::createUuid().toString();
TCHttpService::getInstance()->downloadImage(m_requestId, imageUrl);
}
void FrmImgShow::setImage(const QPixmap &pixmap)
{
// int h = pixmap.height();
// int w = pixmap.width();
// int sh, sw;
// if (h >= w) {
// sh = 140;
// sw = w * h / 140;
// }
// else {
// sw = 140;
// sh = h * w /140;
// }
labImg->setPixmap(pixmap.scaled(this->labImg->width(), this->labImg->height()));
}
void FrmImgShow::initSignalSlot()
{
connect(btnCopy, &QPushButton::clicked, this, [this](){
switch(FrmAlbum::getCopyType()) {
case 0:
{
QClipboard* clipboard = QApplication::clipboard();
QString mdStr = QString("![](%1)").arg(m_currentUrl.toString());
clipboard->setText(mdStr);
break;
}
case 1:
{
QClipboard* clipboard = QApplication::clipboard();
QString urlStr = m_currentUrl.toString();
clipboard->setText(urlStr);
break;
}
case 2:
{
QClipboard* clipboard = QApplication::clipboard();
QString htmlStr = QString("<img src=\"%1\"/>").arg(m_currentUrl.toString());
clipboard->setText(htmlStr);
break;
}
case 3:
{
QClipboard* clipboard = QApplication::clipboard();
QString ubbStr = QString("[IMG]%1[/IMG]").arg(m_currentUrl.toString());
clipboard->setText(ubbStr);
break;
}
}
});
connect(ckbSelect, &QCheckBox::checkStateChanged, this, [this](Qt::CheckState state){
if (state == Qt::Unchecked) {
emit signal_imageUnselected(m_currentUrl.toString());
}
if (state == Qt::Checked) {
emit signal_imageSelected(m_currentUrl.toString());
}
});
connect(btnDelete, &QPushButton::clicked, this, [this](){
// qDebug() <<"delete";
QString domain = FileConfigDecode::getInstance()->getAddress();
QString userName = FileConfigDecode::getInstance()->getUserName();
int del_res = ImageManager::instance()->removeImageUrl(domain, userName, m_currentUrl.toString());
// qDebug() << "del_res:" << del_res;
emit signal_imageDelete();
});
}
QSize FrmImgShow::sizeHint()
{
return QSize(300, 300);
}
bool FrmImgShow::eventFilter(QObject *watched, QEvent *event)
{
if (watched == btnCopy) {
if (event->type() == QEvent::Enter) {
btnCopy->setIcon(QIcon(QPixmap(":/qrc/image/copy_blue.png")));
return true;
}
else if (event->type() == QEvent::Leave) {
btnCopy->setIcon(QIcon(QPixmap(":/qrc/image/copy_white.png")));
return true;
}
else {
return false;
}
}
if (watched == btnDelete) {
if (event->type() == QEvent::Enter) {
btnDelete->setIcon(QIcon(QPixmap(":/qrc/image/delete_red.png")));
return true;
}
else if (event->type() == QEvent::Leave) {
btnDelete->setIcon(QIcon(QPixmap(":/qrc/image/delete_white.png")));
return true;
}
else {
return false;
}
}
return QWidget::eventFilter(watched, event);
}
void FrmImgShow::onFinished(QNetworkReply *reply)
{
if (reply->error() == QNetworkReply::NoError) {
QByteArray imageData = reply->readAll();
QPixmap pix;
pix.loadFromData(imageData);
this->labImg->setPixmap(pix);
}
}
void FrmImgShow::initForm()
{
this->setWindowFlag(Qt::FramelessWindowHint);
this->setWindowFlags(this->windowFlags() | Qt::WindowSystemMenuHint | Qt::WindowMinMaxButtonsHint);
setAttribute(Qt::WA_TranslucentBackground);
vLayout = new QVBoxLayout(this);
setLayout(vLayout);
labImg = new QLabel();
btnCopy = new QPushButton();
btnCopy->setMinimumSize(22, 22);
btnCopy->setFlat(true);
btnCopy->setIcon(QIcon(":/qrc/image/copy_white.png"));
btnCopy->setCursor(Qt::PointingHandCursor);
btnCopy->installEventFilter(this);
btnDelete = new QPushButton();
btnDelete->setMinimumSize(22, 22);
btnDelete->setFlat(true);
btnDelete->setIcon(QIcon(":/qrc/image/delete_white.png"));
btnDelete->installEventFilter(this);
btnDelete->setCursor(Qt::PointingHandCursor);
horizenSpacer = new QSpacerItem(40, 20, QSizePolicy::Expanding, QSizePolicy::Minimum);
hLayout = new QHBoxLayout();
ckbSelect = new QCheckBox();
ckbSelect->setText("");
ckbSelect->setMinimumSize(20, 20);
ckbSelect->setCursor(Qt::PointingHandCursor);
// ckbSelect->setStyleSheet("border:1px solid white;border-radius:5px");
// ckbSelect->setStyleSheet("border-style:none;background-color:green;spacing:0px;");
hLayout->addWidget(btnCopy);
hLayout->addWidget(btnDelete);
hLayout->setContentsMargins(0, 0, 0, 0);
hLayout->addSpacerItem(horizenSpacer);
hLayout->addWidget(ckbSelect);
hLayout->setSpacing(0);
vLayout->addWidget(labImg);
vLayout->addLayout(hLayout);
vLayout->setContentsMargins(0, 0, 0, 0);
// btnCopy->setIcon(QIcon(QPixmap(":/qrc/image/copy_white.png")));
// btnDelete->setIcon(QIcon(QPixmap(":/qrc/image/delete_white.png")));
// btnCopy->setFixedSize(32, 32);
// btnCopy->setCursor(Qt::PointingHandCursor);
// setStyleSheet("background-color: #FF0000");
setFixedSize(134, 160);
this->labImg->setMinimumSize(130, 130);
}
void FrmImgShow::initWidget()
{
btnCopy->installEventFilter(this);
btnDelete->installEventFilter(this);
}