frmimgshow.cpp 6.1 KB

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