frmupload.cpp 8.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292
  1. #include "frmupload.h"
  2. #include "ui_frmupload.h"
  3. #include <QtDebug>
  4. #include <QImageReader>
  5. #include <QStandardPaths>
  6. FrmUpload::FrmUpload(QWidget *parent)
  7. : QWidget(parent)
  8. , ui(new Ui::FrmUpload)
  9. {
  10. ui->setupUi(this);
  11. initFrom();
  12. initWidget();
  13. connect(TCHttpService::getInstance(), &TCHttpService::signal_uploadFileSec, this, &FrmUpload::slot_uploadFileSec);
  14. QButtonGroup *buttonGroup = new QButtonGroup(this);
  15. buttonGroup->setExclusive(true); // 确保每次只有一个按钮被选中
  16. // 添加按钮到组中
  17. buttonGroup->addButton(ui->btnHTML);
  18. buttonGroup->addButton(ui->btnMarkdown);
  19. buttonGroup->addButton(ui->btnUBB);
  20. buttonGroup->addButton(ui->btnUrl);
  21. // 设置样式表
  22. QString buttonStyle = R"(
  23. QPushButton {
  24. color: black;
  25. }
  26. QPushButton:checked {
  27. color: #409EFF
  28. }
  29. )";
  30. ui->btnHTML->setStyleSheet(buttonStyle);
  31. ui->btnMarkdown->setStyleSheet(buttonStyle);
  32. ui->btnUBB->setStyleSheet(buttonStyle);
  33. ui->btnUrl->setStyleSheet(buttonStyle);
  34. }
  35. FrmUpload::~FrmUpload()
  36. {
  37. delete ui;
  38. }
  39. void FrmUpload::slot_uploadFileSec(QString url)
  40. {
  41. qDebug() << "slot_uploadFileSec:" << url;
  42. QClipboard* clipboard = QApplication::clipboard();
  43. QString domain = FileConfigDecode::getInstance()->getAddress();
  44. QString userName = FileConfigDecode::getInstance()->getUserName();
  45. ImageManager::instance()->addImageUrl(domain, userName, url);
  46. if (copyType == COPY_TYPE_MARKDOWN) {
  47. clipboard->setText(QString("![](%1)").arg(url));
  48. emit signal_uploadSuccess(url);
  49. }
  50. if (copyType == COPY_TYPE_URL) {
  51. clipboard->setText(url);
  52. emit signal_uploadSuccess(url);
  53. }
  54. if (copyType == COPY_TYPE_UBB) {
  55. // [IMG]https://imagehyj.oss-cn-hangzhou.aliyuncs.com/blog/logo512.png[/IMG]
  56. clipboard->setText(QString("[IMG]%1[/IMG]").arg(url));
  57. emit signal_uploadSuccess(url);
  58. }
  59. if (copyType == COPY_TYPE_HTML) {
  60. clipboard->setText(QString("<img src=\"%1\"/>").arg(url));
  61. emit signal_uploadSuccess(url);
  62. // QThread::sleep(50);
  63. }
  64. }
  65. void FrmUpload::slot_progressUpdate(int v)
  66. {
  67. ui->progressBar->setValue(v);
  68. }
  69. bool FrmUpload::eventFilter(QObject *watched, QEvent *event)
  70. {
  71. static bool mousePressed = false;
  72. if (watched == ui->frmUpload) {
  73. QMouseEvent* mouseEvent = static_cast<QMouseEvent*>(event);
  74. if (mouseEvent->type() == QMouseEvent::MouseButtonPress && mouseEvent->button() == Qt::LeftButton) {
  75. mousePressed = true;
  76. return true;
  77. }
  78. else if (mouseEvent->type() == QMouseEvent::MouseButtonRelease && mouseEvent->button() == Qt::LeftButton && mousePressed == true) {
  79. QStringList fileList = QFileDialog::getOpenFileNames(this, "选择图片", "C:\\", "Files (*);;"
  80. "PNG (*.png);;"
  81. "JPG (*.jpg);;"
  82. "JPEG (*.jpeg);;"
  83. "SVG (*.svg)");
  84. uploadFiles(fileList);
  85. mousePressed = false;
  86. return true;
  87. }
  88. else {
  89. return false;
  90. }
  91. }
  92. return QWidget::eventFilter(watched, event);
  93. }
  94. void FrmUpload::dragEnterEvent(QDragEnterEvent *event)
  95. {
  96. if (event->mimeData()->hasUrls()) {
  97. event->acceptProposedAction();
  98. }
  99. else {
  100. event->ignore();
  101. }
  102. }
  103. void FrmUpload::dropEvent(QDropEvent *event)
  104. {
  105. QStringList uploadList;
  106. const QMimeData* mimeData = event->mimeData();
  107. if (!mimeData->hasUrls()) {
  108. return;
  109. }
  110. QList<QUrl> urlList = mimeData->urls();
  111. #if !DEBUG
  112. foreach (QUrl url, urlList) {
  113. qDebug() << url.toLocalFile();
  114. }
  115. #endif
  116. foreach (QUrl url, urlList) {
  117. QFileInfo fileInfo(url.toLocalFile());
  118. if (fileInfo.isDir()) {
  119. continue;
  120. }
  121. else {
  122. // QImageReader reader(url.toLocalFile());
  123. // if (!reader.imageFormat()) {
  124. // uploadList << url.toLocalFile();
  125. // TCHttpService::getInstance()->apiMd5(fileInfo.absoluteFilePath());
  126. }
  127. }
  128. }
  129. void FrmUpload::initFrom()
  130. {
  131. ui->frmUpload->setMinimumSize(QSize(400, 200));
  132. ui->btnHTML->setText("HTML");
  133. ui->btnFastUpload->setText("剪贴板上传");
  134. ui->btnMarkdown->setText("Markdown");
  135. ui->btnUrl->setText("URL");
  136. ui->btnUBB->setText("UBB");
  137. ui->btnMarkdown->setChecked(true);
  138. ui->btnHTML->setChecked(false);
  139. ui->btnUBB->setChecked(false);
  140. ui->btnUrl->setChecked(false);
  141. }
  142. void FrmUpload::initWidget()
  143. {
  144. ui->frmUpload->installEventFilter(this);
  145. this->setAcceptDrops(true);
  146. setWindowFlags(Qt::FramelessWindowHint); // 移除系统边框
  147. setAttribute(Qt::WA_TranslucentBackground); // 启用透明背景
  148. connect(TCHttpService::getInstance(), &TCHttpService::signal_progressUpdate, this, &FrmUpload::slot_progressUpdate);
  149. // ui->frmUpload->setAcceptDrops(true);
  150. }
  151. void FrmUpload::uploadFiles(QStringList fileList)
  152. {
  153. if (!TCHttpService::getInstance()->getOnlineState())
  154. return;
  155. foreach (QString p, fileList) {
  156. qDebug() << "upload:" << p;
  157. TCHttpService::getInstance()->apiUpload(p);
  158. }
  159. // TCHttpService::getInstance()->apiMyfileCount();
  160. // TCHttpService::getInstance()->apiMyfileNormal();
  161. }
  162. void FrmUpload::on_btnFastUpload_clicked()
  163. {
  164. // QString addDataPath = QStandardPaths::writableLocation(QStandardPaths::AppConfigLocation);
  165. // QString cacheDirPath = addDataPath + "/cache/";
  166. QDir cacheDir(QStandardPaths::writableLocation(QStandardPaths::CacheLocation));
  167. if (!cacheDir.exists()) {
  168. cacheDir.mkpath(".");
  169. }
  170. QClipboard* clipboard = QApplication::clipboard();
  171. const QMimeData* mimeData = clipboard->mimeData();
  172. if (mimeData->hasImage()) {
  173. ui->progressBar->setValue(0);
  174. QImage image = clipboard->image();
  175. if (!image.isNull()) {
  176. RenameType renametype = FileConfigDecode::getInstance()->getRenameType();
  177. qDebug() << "renameType:" << renametype;
  178. if (renametype == RENAME_TYPE_NORMAL) {
  179. bool ok;
  180. QString timestamp = QDateTime::currentDateTime().toString("yyyyMMdd_hhmmsszzz");
  181. QString text = QInputDialog::getText(this, "重命名图片", "输入文件名", QLineEdit::Normal, timestamp, &ok);
  182. if (ok && !text.isEmpty()) {
  183. QString filePath = cacheDir.filePath(text + ".png");
  184. if (image.save(filePath, "PNG")) {
  185. TCHttpService::getInstance()->apiUpload(filePath);
  186. }
  187. }
  188. }
  189. if (renametype == RENAME_TYPE_TIME) {
  190. qDebug() << "time rename";
  191. QString timestamp = QDateTime::currentDateTime().toString("yyyyMMdd_hhmmsszzz");
  192. QString filePath = cacheDir.filePath(timestamp + ".png");
  193. if (image.save(filePath, "PNG")) {
  194. TCHttpService::getInstance()->apiUpload(filePath);
  195. }
  196. }
  197. else {
  198. QString timestamp = QDateTime::currentDateTime().toString("yyyyMMdd_hhmmsszzz");
  199. QString filePath = cacheDir.filePath("clipboard_" + timestamp + ".png");
  200. if (image.save(filePath, "PNG")) {
  201. TCHttpService::getInstance()->apiUpload(filePath);
  202. }
  203. }
  204. }
  205. clipboard->clear();
  206. }
  207. }
  208. void FrmUpload::on_btnMarkdown_clicked()
  209. {
  210. if (!ui->btnMarkdown->isChecked())
  211. return;
  212. copyType = COPY_TYPE_MARKDOWN;
  213. ui->btnMarkdown->setChecked(true);
  214. ui->btnUrl->setChecked(false);
  215. ui->btnHTML->setChecked(false);
  216. ui->btnUBB->setChecked(false);
  217. qDebug() << copyType;
  218. }
  219. void FrmUpload::on_btnUrl_clicked()
  220. {
  221. if (!ui->btnUrl->isChecked())
  222. return;
  223. copyType = COPY_TYPE_URL;
  224. ui->btnMarkdown->setChecked(false);
  225. ui->btnUrl->setChecked(true);
  226. ui->btnHTML->setChecked(false);
  227. ui->btnUBB->setChecked(false);
  228. qDebug() << copyType;
  229. }
  230. void FrmUpload::on_btnHTML_clicked()
  231. {
  232. if (!ui->btnHTML->isChecked())
  233. return;
  234. copyType = COPY_TYPE_HTML;
  235. ui->btnMarkdown->setChecked(false);
  236. ui->btnUrl->setChecked(false);
  237. ui->btnHTML->setChecked(true);
  238. ui->btnUBB->setChecked(false);
  239. qDebug() << copyType;
  240. }
  241. void FrmUpload::on_btnUBB_clicked()
  242. {
  243. if (!ui->btnUBB->isChecked())
  244. return;
  245. copyType = COPY_TYPE_UBB;
  246. ui->btnMarkdown->setChecked(false);
  247. ui->btnUrl->setChecked(false);
  248. ui->btnHTML->setChecked(false);
  249. ui->btnUBB->setChecked(true);
  250. qDebug() << copyType;
  251. }