frmimgshow.cpp 6.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215
  1. #include "frmimgshow.h"
  2. #include "frmalbum.h"
  3. FrmImgShow::FrmImgShow(QWidget *parent) : QWidget(parent)
  4. {
  5. initForm();
  6. initSignalSlot();
  7. connect(TCHttpService::getInstance(), &TCHttpService::signal_imageDownloaded,
  8. this, [this](const QString& requestId, const QPixmap& pixmap){
  9. if (requestId == m_requestId) {
  10. setImage(pixmap);
  11. }
  12. });
  13. connect(TCHttpService::getInstance(), &TCHttpService::signal_downloadFailed,
  14. this, [this](const QString& requestId){
  15. if (requestId == m_requestId) {
  16. qDebug() << "load failed";
  17. }
  18. });
  19. }
  20. void FrmImgShow::loadImage(const QUrl &imageUrl)
  21. {
  22. m_currentUrl = imageUrl;
  23. m_requestId = QUuid::createUuid().toString();
  24. TCHttpService::getInstance()->downloadImage(m_requestId, imageUrl);
  25. }
  26. void FrmImgShow::setImage(const QPixmap &pixmap)
  27. {
  28. // int h = pixmap.height();
  29. // int w = pixmap.width();
  30. // int sh, sw;
  31. // if (h >= w) {
  32. // sh = 140;
  33. // sw = w * h / 140;
  34. // }
  35. // else {
  36. // sw = 140;
  37. // sh = h * w /140;
  38. // }
  39. labImg->setPixmap(pixmap.scaled(this->labImg->width(), this->labImg->height()));
  40. }
  41. void FrmImgShow::initSignalSlot()
  42. {
  43. connect(btnCopy, &QPushButton::clicked, this, [this](){
  44. switch(FrmAlbum::getCopyType()) {
  45. case 0:
  46. {
  47. QClipboard* clipboard = QApplication::clipboard();
  48. QString mdStr = QString("![](%1)").arg(m_currentUrl.toString());
  49. clipboard->setText(mdStr);
  50. break;
  51. }
  52. case 1:
  53. {
  54. QClipboard* clipboard = QApplication::clipboard();
  55. QString urlStr = m_currentUrl.toString();
  56. clipboard->setText(urlStr);
  57. break;
  58. }
  59. case 2:
  60. {
  61. QClipboard* clipboard = QApplication::clipboard();
  62. QString htmlStr = QString("<img src=\"%1\"/>").arg(m_currentUrl.toString());
  63. clipboard->setText(htmlStr);
  64. break;
  65. }
  66. case 3:
  67. {
  68. QClipboard* clipboard = QApplication::clipboard();
  69. QString ubbStr = QString("[IMG]%1[/IMG]").arg(m_currentUrl.toString());
  70. clipboard->setText(ubbStr);
  71. break;
  72. }
  73. }
  74. });
  75. connect(ckbSelect, &QCheckBox::checkStateChanged, this, [this](Qt::CheckState state){
  76. if (state == Qt::Unchecked) {
  77. emit signal_imageUnselected(m_currentUrl.toString());
  78. }
  79. if (state == Qt::Checked) {
  80. emit signal_imageSelected(m_currentUrl.toString());
  81. }
  82. });
  83. connect(btnDelete, &QPushButton::clicked, this, [this](){
  84. // qDebug() <<"delete";
  85. QString domain = FileConfigDecode::getInstance()->getAddress();
  86. QString userName = FileConfigDecode::getInstance()->getUserName();
  87. int del_res = ImageManager::instance()->removeImageUrl(domain, userName, m_currentUrl.toString());
  88. // qDebug() << "del_res:" << del_res;
  89. emit signal_imageDelete();
  90. });
  91. }
  92. QSize FrmImgShow::sizeHint()
  93. {
  94. return QSize(300, 300);
  95. }
  96. bool FrmImgShow::eventFilter(QObject *watched, QEvent *event)
  97. {
  98. if (watched == btnCopy) {
  99. if (event->type() == QEvent::Enter) {
  100. btnCopy->setIcon(QIcon(QPixmap(":/qrc/image/copy_blue.png")));
  101. return true;
  102. }
  103. else if (event->type() == QEvent::Leave) {
  104. btnCopy->setIcon(QIcon(QPixmap(":/qrc/image/copy_white.png")));
  105. return true;
  106. }
  107. else {
  108. return false;
  109. }
  110. }
  111. if (watched == btnDelete) {
  112. if (event->type() == QEvent::Enter) {
  113. btnDelete->setIcon(QIcon(QPixmap(":/qrc/image/delete_red.png")));
  114. return true;
  115. }
  116. else if (event->type() == QEvent::Leave) {
  117. btnDelete->setIcon(QIcon(QPixmap(":/qrc/image/delete_white.png")));
  118. return true;
  119. }
  120. else {
  121. return false;
  122. }
  123. }
  124. return QWidget::eventFilter(watched, event);
  125. }
  126. void FrmImgShow::onFinished(QNetworkReply *reply)
  127. {
  128. if (reply->error() == QNetworkReply::NoError) {
  129. QByteArray imageData = reply->readAll();
  130. QPixmap pix;
  131. pix.loadFromData(imageData);
  132. this->labImg->setPixmap(pix);
  133. }
  134. }
  135. void FrmImgShow::initForm()
  136. {
  137. this->setWindowFlag(Qt::FramelessWindowHint);
  138. this->setWindowFlags(this->windowFlags() | Qt::WindowSystemMenuHint | Qt::WindowMinMaxButtonsHint);
  139. setAttribute(Qt::WA_TranslucentBackground);
  140. vLayout = new QVBoxLayout(this);
  141. setLayout(vLayout);
  142. labImg = new QLabel();
  143. btnCopy = new QPushButton();
  144. btnCopy->setMinimumSize(22, 22);
  145. btnCopy->setFlat(true);
  146. btnCopy->setIcon(QIcon(":/qrc/image/copy_white.png"));
  147. btnCopy->setCursor(Qt::PointingHandCursor);
  148. btnCopy->installEventFilter(this);
  149. btnDelete = new QPushButton();
  150. btnDelete->setMinimumSize(22, 22);
  151. btnDelete->setFlat(true);
  152. btnDelete->setIcon(QIcon(":/qrc/image/delete_white.png"));
  153. btnDelete->installEventFilter(this);
  154. btnDelete->setCursor(Qt::PointingHandCursor);
  155. horizenSpacer = new QSpacerItem(40, 20, QSizePolicy::Expanding, QSizePolicy::Minimum);
  156. hLayout = new QHBoxLayout();
  157. ckbSelect = new QCheckBox();
  158. ckbSelect->setText("");
  159. ckbSelect->setMinimumSize(20, 20);
  160. ckbSelect->setCursor(Qt::PointingHandCursor);
  161. // ckbSelect->setStyleSheet("border:1px solid white;border-radius:5px");
  162. // ckbSelect->setStyleSheet("border-style:none;background-color:green;spacing:0px;");
  163. hLayout->addWidget(btnCopy);
  164. hLayout->addWidget(btnDelete);
  165. hLayout->setContentsMargins(0, 0, 0, 0);
  166. hLayout->addSpacerItem(horizenSpacer);
  167. hLayout->addWidget(ckbSelect);
  168. hLayout->setSpacing(0);
  169. vLayout->addWidget(labImg);
  170. vLayout->addLayout(hLayout);
  171. vLayout->setContentsMargins(0, 0, 0, 0);
  172. // btnCopy->setIcon(QIcon(QPixmap(":/qrc/image/copy_white.png")));
  173. // btnDelete->setIcon(QIcon(QPixmap(":/qrc/image/delete_white.png")));
  174. // btnCopy->setFixedSize(32, 32);
  175. // btnCopy->setCursor(Qt::PointingHandCursor);
  176. // setStyleSheet("background-color: #FF0000");
  177. setFixedSize(134, 160);
  178. this->labImg->setMinimumSize(130, 130);
  179. }
  180. void FrmImgShow::initWidget()
  181. {
  182. btnCopy->installEventFilter(this);
  183. btnDelete->installEventFilter(this);
  184. }