qt 6.5.1 original

This commit is contained in:
kleuter
2023-10-29 23:33:08 +01:00
parent 71d22ab6b0
commit 85d238dfda
21202 changed files with 5499099 additions and 0 deletions

View File

@ -0,0 +1,17 @@
# Copyright (C) 2022 The Qt Company Ltd.
# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## anchorlayout Binary:
#####################################################################
cmake_minimum_required(VERSION 3.16)
qt_internal_add_manual_test(anchorlayout
GUI
SOURCES
main.cpp
LIBRARIES
Qt::Gui
Qt::Widgets
)

View File

@ -0,0 +1,9 @@
TARGET = anchorlayout
QT += widgets
SOURCES = main.cpp
# install
target.path = $$[QT_INSTALL_EXAMPLES]/widgets/graphicsview/anchorlayout
INSTALLS += target

View File

@ -0,0 +1,89 @@
// Copyright (C) 2016 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
#include <QtWidgets>
static QGraphicsProxyWidget *createItem(const QSizeF &minimum = QSizeF(100.0, 100.0),
const QSizeF &preferred = QSize(150.0, 100.0),
const QSizeF &maximum = QSizeF(200.0, 100.0),
const QString &name = "0")
{
QGraphicsProxyWidget *w = new QGraphicsProxyWidget;
w->setWidget(new QPushButton(name));
w->setData(0, name);
w->setMinimumSize(minimum);
w->setPreferredSize(preferred);
w->setMaximumSize(maximum);
w->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Preferred);
return w;
}
int main(int argc, char **argv)
{
QApplication app(argc, argv);
QGraphicsScene scene;
scene.setSceneRect(0, 0, 800, 480);
QSizeF minSize(30, 100);
QSizeF prefSize(210, 100);
QSizeF maxSize(300, 100);
QGraphicsProxyWidget *a = createItem(minSize, prefSize, maxSize, "A");
QGraphicsProxyWidget *b = createItem(minSize, prefSize, maxSize, "B");
QGraphicsProxyWidget *c = createItem(minSize, prefSize, maxSize, "C");
QGraphicsProxyWidget *d = createItem(minSize, prefSize, maxSize, "D");
QGraphicsProxyWidget *e = createItem(minSize, prefSize, maxSize, "E");
QGraphicsProxyWidget *f = createItem(QSizeF(30, 50), QSizeF(150, 50), maxSize, "F (overflow)");
QGraphicsProxyWidget *g = createItem(QSizeF(30, 50), QSizeF(30, 100), maxSize, "G (overflow)");
QGraphicsAnchorLayout *l = new QGraphicsAnchorLayout;
l->setSpacing(0);
QGraphicsWidget *w = new QGraphicsWidget(nullptr, Qt::Window);
w->setPos(20, 20);
w->setLayout(l);
// vertical
l->addAnchor(a, Qt::AnchorTop, l, Qt::AnchorTop);
l->addAnchor(b, Qt::AnchorTop, l, Qt::AnchorTop);
l->addAnchor(c, Qt::AnchorTop, a, Qt::AnchorBottom);
l->addAnchor(c, Qt::AnchorTop, b, Qt::AnchorBottom);
l->addAnchor(c, Qt::AnchorBottom, d, Qt::AnchorTop);
l->addAnchor(c, Qt::AnchorBottom, e, Qt::AnchorTop);
l->addAnchor(d, Qt::AnchorBottom, l, Qt::AnchorBottom);
l->addAnchor(e, Qt::AnchorBottom, l, Qt::AnchorBottom);
l->addAnchor(c, Qt::AnchorTop, f, Qt::AnchorTop);
l->addAnchor(c, Qt::AnchorVerticalCenter, f, Qt::AnchorBottom);
l->addAnchor(f, Qt::AnchorBottom, g, Qt::AnchorTop);
l->addAnchor(c, Qt::AnchorBottom, g, Qt::AnchorBottom);
// horizontal
l->addAnchor(l, Qt::AnchorLeft, a, Qt::AnchorLeft);
l->addAnchor(l, Qt::AnchorLeft, d, Qt::AnchorLeft);
l->addAnchor(a, Qt::AnchorRight, b, Qt::AnchorLeft);
l->addAnchor(a, Qt::AnchorRight, c, Qt::AnchorLeft);
l->addAnchor(c, Qt::AnchorRight, e, Qt::AnchorLeft);
l->addAnchor(b, Qt::AnchorRight, l, Qt::AnchorRight);
l->addAnchor(e, Qt::AnchorRight, l, Qt::AnchorRight);
l->addAnchor(d, Qt::AnchorRight, e, Qt::AnchorLeft);
l->addAnchor(l, Qt::AnchorLeft, f, Qt::AnchorLeft);
l->addAnchor(l, Qt::AnchorLeft, g, Qt::AnchorLeft);
l->addAnchor(f, Qt::AnchorRight, g, Qt::AnchorRight);
scene.addItem(w);
scene.setBackgroundBrush(Qt::darkGreen);
QGraphicsView view(&scene);
view.show();
return app.exec();
}

View File

@ -0,0 +1,16 @@
# Copyright (C) 2022 The Qt Company Ltd.
# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## flicker Binary:
#####################################################################
qt_internal_add_manual_test(flicker
GUI
SOURCES
main.cpp
window.cpp window.h
LIBRARIES
Qt::Gui
Qt::Widgets
)

View File

@ -0,0 +1,3 @@
QT += widgets
HEADERS += window.h
SOURCES += main.cpp window.cpp

View File

@ -0,0 +1,18 @@
// Copyright (C) 2016 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#include <QMainWindow>
#include <QApplication>
#include "window.h"
int main(int argc, char **argv)
{
QApplication app(argc, argv);
Window *window = new Window();
window->resize(800, 600);
window->show();
return app.exec();
}

View File

@ -0,0 +1,34 @@
// Copyright (C) 2020 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#include "window.h"
void SlowWidget::setGeometry(const QRectF &rect)
{
bool reiterate = false;
Statistics &stats = *m_stats;
if (stats.relayoutClicked) {
++(stats.setGeometryTracker[this]);
++stats.setGeometryCount;
qDebug() << "setGeometryCount:" << stats.setGeometryCount;
if (stats.setGeometryTracker.count() == m_window->m_depthSpinBox->value()) {
++stats.currentBenchmarkIteration;
qDebug() << "currentBenchmarkIteration:" << stats.currentBenchmarkIteration;
if (stats.currentBenchmarkIteration == m_window->m_benchmarkIterationsSpinBox->value()) {
if (stats.output)
stats.output->setText(tr("DONE. Elapsed: %1, setGeometryCount: %2").arg(stats.timer.elapsed()).arg(stats.setGeometryCount));
} else {
reiterate = true;
}
stats.setGeometryTracker.clear();
}
}
QGraphicsWidget::setGeometry(rect);
if (reiterate) {
m_window->doAgain();
//QTimer::singleShot(0, m_window, SLOT(doAgain()));
}
}

View File

@ -0,0 +1,247 @@
// Copyright (C) 2021 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#ifndef WINDOW_H
#define WINDOW_H
#include <QGraphicsScene>
#include <QGraphicsWidget>
#include <QGraphicsLinearLayout>
#include <QGraphicsView>
#include <QSpinBox>
#include <QCheckBox>
#include <QPushButton>
#include <QLabel>
#include <QHBoxLayout>
#include <QPainter>
#include <QApplication>
#include <QThread>
#include <QMap>
#include <QElapsedTimer>
#include <QDebug>
struct Statistics {
Statistics() : setGeometryCount(0), sleepMsecs(0), output(0),
currentBenchmarkIteration(0), relayoutClicked(false)
{
}
QMap<QGraphicsWidget*, int> setGeometryTracker;
QElapsedTimer timer;
int setGeometryCount;
int sleepMsecs;
QLabel *output;
void sleep()
{
QThread::msleep(sleepMsecs);
}
int currentBenchmarkIteration;
bool relayoutClicked;
};
class Window;
class SlowWidget : public QGraphicsWidget {
public:
SlowWidget(QGraphicsWidget *w = nullptr, Qt::WindowFlags wFlags = {}) : QGraphicsWidget(w, wFlags)
{
m_window = 0;
}
void setStats(Statistics *stats)
{
m_stats = stats;
}
void setWindow(Window *window)
{
m_window = window;
}
void setGeometry(const QRectF &rect);
bool event(QEvent *e)
{
if (e->type() == QEvent::LayoutRequest) {
if (m_stats->sleepMsecs > 0) {
m_stats->sleep();
qDebug("sleep %d ms\n", m_stats->sleepMsecs);
}
}
return QGraphicsWidget::event(e);
}
void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget)
{
Q_UNUSED(option);
Q_UNUSED(widget);
painter->setBrush(m_brush);
painter->drawRoundedRect(rect(), 25, 25, Qt::RelativeSize);
painter->drawLine(rect().topLeft(), rect().bottomRight());
painter->drawLine(rect().bottomLeft(), rect().topRight());
}
void setBrush(const QBrush &brush)
{
m_brush = brush;
}
private:
QBrush m_brush;
Statistics *m_stats;
Window *m_window;
};
class Window : public QWidget {
Q_OBJECT
public:
Window() : QWidget()
{
QGraphicsView *m_view = new QGraphicsView(&scene);
m_window = 0;
m_leaf = 0;
m_button = new QPushButton(tr("Relayout"));
m_button->setObjectName("button");
m_sleepLabel = new QLabel(tr("Sleep:"));
m_sleepSpinBox = new QSpinBox;
m_sleepSpinBox->setRange(0, 1000);
m_sleepSpinBox->setSingleStep(10);
m_depthLabel = new QLabel(tr("Depth:"));
m_depthSpinBox = new QSpinBox;
m_depthSpinBox->setObjectName("depthSpinBox");
m_depthSpinBox->setRange(1, 200);
m_depthSpinBox->setSingleStep(5);
m_benchmarkIterationsLabel = new QLabel(tr("Benchmark iterations"));
m_benchmarkIterationsSpinBox = new QSpinBox;
m_benchmarkIterationsSpinBox->setObjectName("benchmarkIterationsSpinBox");
m_benchmarkIterationsSpinBox->setRange(1, 1000);
m_benchmarkIterationsSpinBox->setValue(41);
m_benchmarkIterationsSpinBox->setSingleStep(10);
m_instantCheckBox = new QCheckBox(tr("Instant propagation"));
m_instantCheckBox->setObjectName("instantPropagationCheckbox");
QGraphicsLayout::setInstantInvalidatePropagation(true);
m_instantCheckBox->setChecked(QGraphicsLayout::instantInvalidatePropagation());
m_resultLabel = new QLabel(tr("Press relayout to start test"));
QHBoxLayout *hbox = new QHBoxLayout;
hbox->addWidget(m_sleepLabel);
hbox->addWidget(m_sleepSpinBox);
hbox->addWidget(m_depthLabel);
hbox->addWidget(m_depthSpinBox);
hbox->addWidget(m_benchmarkIterationsLabel);
hbox->addWidget(m_benchmarkIterationsSpinBox);
hbox->addWidget(m_instantCheckBox);
hbox->addWidget(m_resultLabel);
hbox->addStretch();
hbox->addWidget(m_button);
QVBoxLayout *vbox = new QVBoxLayout;
vbox->addWidget(m_view);
vbox->addLayout(hbox);
setLayout(vbox);
metaObject()->connectSlotsByName(this);
m_depthSpinBox->setValue(20); // triggers purposedly on_depthSpinBox_valueChanged
}
private slots:
void on_depthSpinBox_valueChanged(int value)
{
m_stats.relayoutClicked = false;
if (m_window) {
QApplication::processEvents();
delete m_window;
}
m_window = new SlowWidget(0, Qt::Window);
m_window->setStats(&m_stats);
m_window->setWindow(this);
QColor col(Qt::black);
m_window->setBrush(col);
scene.addItem(m_window);
m_leaf = 0;
const int depth = value;
SlowWidget *parent = m_window;
for (int i = 1; i < depth; ++i) {
QGraphicsLinearLayout *l = new QGraphicsLinearLayout(parent);
l->setContentsMargins(2,2,2,2);
SlowWidget *child = new SlowWidget;
QColor col;
col.setHsl(0, 0, 255*i/(depth - 1));
child->setBrush(col);
child->setStats(&m_stats);
child->setWindow(this);
l->addItem(child);
parent = child;
}
m_leaf = parent;
}
void on_button_clicked(bool /*check = false*/)
{
m_stats.relayoutClicked = true;
if (m_leaf) {
QSizeF sz = m_leaf->size();
int w = int(sz.width());
w^=16;
sz = QSizeF(w,w);
m_stats.output = m_resultLabel;
m_stats.output->setText(QString("wait..."));
m_stats.setGeometryCount = 0;
m_stats.setGeometryTracker.clear();
m_stats.sleepMsecs = m_sleepSpinBox->value();
m_stats.timer.start();
m_stats.currentBenchmarkIteration = 0;
m_leaf->setMinimumSize(sz);
m_leaf->setMaximumSize(sz);
}
}
void on_instantPropagationCheckbox_toggled(bool checked)
{
QGraphicsLayout::setInstantInvalidatePropagation(checked);
}
public slots:
void doAgain()
{
if (m_leaf) {
QSizeF sz = m_leaf->size();
int w = int(sz.width());
w^=16;
sz = QSizeF(w,w);
m_leaf->setMinimumSize(sz);
m_leaf->setMaximumSize(sz);
}
}
private:
public:
QGraphicsScene scene;
QGraphicsView *m_view;
QPushButton *m_button;
QLabel *m_sleepLabel;
QSpinBox *m_sleepSpinBox;
QLabel *m_depthLabel;
QSpinBox *m_depthSpinBox;
QLabel *m_benchmarkIterationsLabel;
QSpinBox *m_benchmarkIterationsSpinBox;
QCheckBox *m_instantCheckBox;
QLabel *m_resultLabel;
QGraphicsWidget *m_leaf;
SlowWidget *m_window;
Statistics m_stats;
};
#endif //WINDOW_H

View File

@ -0,0 +1,34 @@
# Copyright (C) 2022 The Qt Company Ltd.
# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## weatheranchorlayout Binary:
#####################################################################
cmake_minimum_required(VERSION 3.16)
qt_internal_add_manual_test(weatheranchorlayout
GUI
SOURCES
main.cpp
LIBRARIES
Qt::Gui
Qt::Widgets
)
# Resources:
set(weatheranchorlayout_resource_files
"images/5days.jpg"
"images/details.jpg"
"images/place.jpg"
"images/tabbar.jpg"
"images/title.jpg"
"images/weather-few-clouds.png"
)
qt_add_resources(weatheranchorlayout "weatheranchorlayout"
PREFIX
"/"
FILES
${weatheranchorlayout_resource_files}
)

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 61 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 849 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

View File

@ -0,0 +1,239 @@
// Copyright (C) 2016 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
#include <QApplication>
#include <QLabel>
#include <QGraphicsAnchorLayout>
#include <QGraphicsProxyWidget>
#include <QGraphicsScene>
#include <QGraphicsSceneResizeEvent>
#include <QGraphicsView>
#include <QGraphicsWidget>
#include <QPainter>
#include <QPushButton>
class GraphicsView : public QGraphicsView
{
public:
GraphicsView(QGraphicsScene *scene, QGraphicsWidget *widget)
: QGraphicsView(scene), w(widget)
{
}
void resizeEvent(QResizeEvent *event) override
{
w->setGeometry(0, 0, event->size().width(), event->size().height());
}
QGraphicsWidget *w;
};
class PixmapWidget : public QGraphicsLayoutItem
{
public:
PixmapWidget(const QPixmap &pix)
: QGraphicsLayoutItem(), original(new QGraphicsPixmapItem(pix))
, r(QRectF(QPointF(0, 0), pix.size()))
{
setGraphicsItem(original);
original->show();
}
~PixmapWidget()
{
setGraphicsItem(nullptr);
delete original;
}
void setZValue(qreal z)
{
original->setZValue(z);
}
void setGeometry(const QRectF &rect) override
{
original->setTransform(QTransform::fromScale(rect.width() / r.width(),
rect.height() / r.height()), true);
original->setPos(rect.x(), rect.y());
r = rect;
}
protected:
QSizeF sizeHint(Qt::SizeHint which, const QSizeF &constraint = QSizeF()) const override
{
Q_UNUSED(constraint);
QSizeF sh;
switch (which) {
case Qt::MinimumSize:
sh = QSizeF(0, 0);
break;
case Qt::PreferredSize:
sh = QSizeF(50, 50);
break;
case Qt::MaximumSize:
sh = QSizeF(QWIDGETSIZE_MAX, QWIDGETSIZE_MAX);
break;
default:
break;
}
return sh;
}
private:
QGraphicsPixmapItem *original;
QRectF r;
};
class PlaceWidget : public QGraphicsWidget
{
Q_OBJECT
public:
PlaceWidget(const QPixmap &pix)
: QGraphicsWidget()
, original(pix)
, scaled(pix)
{
}
void paint(QPainter *painter, const QStyleOptionGraphicsItem *, QWidget *) override
{
const QPointF reflection(0, scaled.height() + 2);
painter->drawPixmap(QPointF(), scaled);
QPixmap tmp(scaled.size());
tmp.fill(Qt::transparent);
QPainter p(&tmp);
// create gradient
QPoint p1(scaled.width() / 2, 0);
QPoint p2(scaled.width() / 2, scaled.height());
QLinearGradient linearGrad(p1, p2);
linearGrad.setColorAt(0, QColor(0, 0, 0, 0));
linearGrad.setColorAt(0.65, QColor(0, 0, 0, 127));
linearGrad.setColorAt(1, QColor(0, 0, 0, 255));
// apply 'mask'
p.setBrush(linearGrad);
p.fillRect(0, 0, tmp.width(), tmp.height(), QBrush(linearGrad));
p.fillRect(0, 0, tmp.width(), tmp.height(), QBrush(linearGrad));
// paint the image flipped
p.setCompositionMode(QPainter::CompositionMode_DestinationOver);
p.drawPixmap(0, 0, QPixmap::fromImage(scaled.toImage().mirrored(false, true)));
p.end();
painter->drawPixmap(reflection, tmp);
}
void resizeEvent(QGraphicsSceneResizeEvent *event) override
{
QSize newSize = event->newSize().toSize();
newSize.setHeight(newSize.height() / 2);
scaled = original.scaled(newSize);
}
QRectF boundingRect() const override
{
QSize size(scaled.width(), scaled.height() * 2 + 2);
return QRectF(QPointF(0, 0), size);
}
private:
QPixmap original;
QPixmap scaled;
};
int main(int argc, char *argv[])
{
Q_INIT_RESOURCE(weatheranchorlayout);
QApplication app(argc, argv);
QGraphicsScene scene;
scene.setSceneRect(0, 0, 800, 480);
// pixmaps widgets
PixmapWidget *title = new PixmapWidget(QPixmap(":/images/title.jpg"));
PlaceWidget *place = new PlaceWidget(QPixmap(":/images/place.jpg"));
PixmapWidget *details = new PixmapWidget(QPixmap(":/images/5days.jpg"));
PixmapWidget *sunnyWeather = new PixmapWidget(QPixmap(":/images/weather-few-clouds.png"));
PixmapWidget *tabbar = new PixmapWidget(QPixmap(":/images/tabbar.jpg"));
// setup sizes
title->setPreferredSize(QSizeF(348, 45));
title->setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Minimum);
place->setPreferredSize(QSizeF(96, 72));
place->setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Minimum);
details->setMinimumSize(QSizeF(200, 112));
details->setPreferredSize(QSizeF(200, 112));
details->setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Minimum);
tabbar->setPreferredSize(QSizeF(70, 24));
tabbar->setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Minimum);
sunnyWeather->setPreferredSize(QSizeF(128, 97));
sunnyWeather->setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Minimum);
sunnyWeather->setZValue(9999);
// start anchor layout
QGraphicsAnchorLayout *layout = new QGraphicsAnchorLayout;
layout->setSpacing(0);
// setup the main widget
QGraphicsWidget *widget = new QGraphicsWidget(nullptr, Qt::Window);
QPalette p;
p.setColor(QPalette::Window, Qt::black);
widget->setPalette(p);
widget->setPos(20, 20);
widget->setLayout(layout);
// vertical anchors
QGraphicsAnchor *anchor = layout->addAnchor(title, Qt::AnchorTop, layout, Qt::AnchorTop);
anchor = layout->addAnchor(place, Qt::AnchorTop, title, Qt::AnchorBottom);
anchor->setSpacing(12);
anchor = layout->addAnchor(place, Qt::AnchorBottom, layout, Qt::AnchorBottom);
anchor->setSpacing(12);
anchor = layout->addAnchor(sunnyWeather, Qt::AnchorTop, title, Qt::AnchorTop);
anchor = layout->addAnchor(sunnyWeather, Qt::AnchorBottom, layout, Qt::AnchorVerticalCenter);
anchor = layout->addAnchor(tabbar, Qt::AnchorTop, title, Qt::AnchorBottom);
anchor->setSpacing(5);
anchor = layout->addAnchor(details, Qt::AnchorTop, tabbar, Qt::AnchorBottom);
anchor->setSpacing(2);
anchor = layout->addAnchor(details, Qt::AnchorBottom, layout, Qt::AnchorBottom);
anchor->setSpacing(12);
// horizontal anchors
anchor = layout->addAnchor(layout, Qt::AnchorLeft, title, Qt::AnchorLeft);
anchor = layout->addAnchor(title, Qt::AnchorRight, layout, Qt::AnchorRight);
anchor = layout->addAnchor(place, Qt::AnchorLeft, layout, Qt::AnchorLeft);
anchor->setSpacing(15);
anchor = layout->addAnchor(place, Qt::AnchorRight, details, Qt::AnchorLeft);
anchor->setSpacing(35);
anchor = layout->addAnchor(sunnyWeather, Qt::AnchorLeft, place, Qt::AnchorHorizontalCenter);
anchor = layout->addAnchor(sunnyWeather, Qt::AnchorRight, layout, Qt::AnchorHorizontalCenter);
anchor = layout->addAnchor(tabbar, Qt::AnchorHorizontalCenter, details, Qt::AnchorHorizontalCenter);
anchor = layout->addAnchor(details, Qt::AnchorRight, layout, Qt::AnchorRight);
// QGV setup
scene.addItem(widget);
scene.setBackgroundBrush(Qt::white);
QGraphicsView *view = new QGraphicsView(&scene);
view->show();
return app.exec();
}
#include "main.moc"

View File

@ -0,0 +1,8 @@
QT += widgets
SOURCES += main.cpp
RESOURCES += weatheranchorlayout.qrc
# install
target.path = $$[QT_INSTALL_EXAMPLES]/widgets/graphicsview/weatheranchorlayout
INSTALLS += target

View File

@ -0,0 +1,10 @@
<!DOCTYPE RCC><RCC version="1.0">
<qresource>
<file>images/5days.jpg</file>
<file>images/title.jpg</file>
<file>images/place.jpg</file>
<file>images/tabbar.jpg</file>
<file>images/details.jpg</file>
<file>images/weather-few-clouds.png</file>
</qresource>
</RCC>