#include "newslistwidget.h" #include #include #include #include #include NewsListWidget::NewsListWidget(QWidget *parent) : QWidget(parent) { news_downloader.targetBytearray = &news_data; news_downloader.setUrl(QUrl("http://translate.lotros.ru/groupware/launcher_news/30/1")); news_layout = new QVBoxLayout(this); news_layout->setSpacing(10); news_layout->setObjectName(QStringLiteral("news_layout")); news_layout->setContentsMargins(2, 2, 10, 2); news_layout->setSizeConstraint(QLayout::SetNoConstraint); connect(&news_update_timer, &QTimer::timeout, &news_downloader, &Downloader::start); connect(&news_downloader, &Downloader::downloadFinished, this, &NewsListWidget::updateNews); emit news_downloader.start(); news_update_timer.setInterval(1000 * 63); // 63 seconds; news_update_timer.start(); setMouseTracking(true); } NewsListWidget::~NewsListWidget() { news_update_timer.stop(); } void NewsListWidget::leaveEvent(QEvent *event) { emit showNoToolTip(); } void NewsListWidget::enterEvent(QEvent *event) { emit showHelpToolTip(); } void NewsListWidget::updateNews() { if (!qApp) return; if (news_data.size() == 0) { constructNewsPiece(0, "Не могу загрузить новости", "Загрузка новостей не удалась. Чтобы просмотреть новости, перейдите на http://translate.lotros.ru/news", "http://translate.lotros.ru/news", ""); return; } QStringList news_list = QString(news_data).split(":::"); news_data.clear(); for (int i = 0; i < news_list.size(); i++) { QStringList news_piece = news_list[i].split("|"); QString img_src = news_piece[0]; QString news_title = news_piece[1]; QString news_desrc = news_piece[2]; QString news_src = news_piece[3]; QString news_date = news_piece[4]; constructNewsPiece(i, news_title, news_desrc, news_src, news_date); // QtConcurrent::run([i, this, img_src](){ // Downloader img_dwnld; // QByteArray img = ""; // img_dwnld.setUrl(QUrl(img_src)); // img_dwnld.targetBytearray = &img; // img_dwnld.start(); // img_dwnld.waitForDownloaded(); // qDebug() << "Downloaded " << img_src; // QPixmap img_pixmap; // img_pixmap.loadFromData(img); // QMetaObject::invokeMethod(this, "setImgToNewsPiece", Qt::QueuedConnection, Q_ARG(int, i), Q_ARG(QPixmap, img_pixmap)); // }); } QSpacerItem* verticalSpacer = new QSpacerItem(20, 0, QSizePolicy::Minimum, QSizePolicy::Expanding); news_layout->addItem(verticalSpacer); } void NewsListWidget::constructNewsPiece(int piece_id, QString title, QString text, QString news_src, QString news_date) { NewsPiece* old_piece = findChild("news_piece_" + QString::number(piece_id)); if (old_piece) { news_layout->removeWidget(old_piece); old_piece->deleteLater(); } NewsPiece* news_piece = new NewsPiece(this); news_piece->setObjectName(QStringLiteral("news_piece_") + QString::number(piece_id)); // news_piece->setIcon(QPixmap(QString::fromUtf8(":/appicon.ico")).scaled(40, 40)); news_piece->setTitle(title, news_src); // news_piece->setContents(text); news_piece->setDate(news_date); news_layout->addWidget(news_piece, piece_id, 0); } void NewsListWidget::setImgToNewsPiece(int piece_id, QPixmap img) { NewsPiece* piece = findChild("news_piece_" + QString::number(piece_id)); if (!piece) return; // piece->setIcon(img); }