<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom" xml:lang="pt"><generator uri="https://gohugo.io/" version="0.150.0">Hugo -- gohugo.io</generator><title>Planet KDE | Português</title><link href="https://planet.kde.org/pt-pt/" rel="alternate" type="text/html" title="html"/><link href="https://planet.kde.org/pt-pt/index.xml" rel="alternate" type="application/rss+xml" title="rss"/><link href="https://planet.kde.org/pt-pt/atom.xml" rel="self" type="application/atom+xml" title="atom"/><link href="https://planet.kde.org/pt-pt/index.jsn" rel="alternate" type="application/json" title="json"/><link href="https://planet.kde.org/" rel="alternate" type="text/html" hreflang="en" title="[English] html"/><link href="https://planet.kde.org/index.xml" rel="alternate" type="application/rss+xml" hreflang="en" title="[English] rss"/><link href="https://planet.kde.org/atom.xml" rel="alternate" type="application/atom+xml" hreflang="en" title="[English] atom"/><link href="https://planet.kde.org/index.jsn" rel="alternate" type="application/json" hreflang="en" title="[English] json"/><link href="https://planet.kde.org/es/" rel="alternate" type="text/html" hreflang="es" title="[Español] html"/><link href="https://planet.kde.org/es/index.xml" rel="alternate" type="application/rss+xml" hreflang="es" title="[Español] rss"/><link href="https://planet.kde.org/es/atom.xml" rel="alternate" type="application/atom+xml" hreflang="es" title="[Español] atom"/><link href="https://planet.kde.org/es/index.jsn" rel="alternate" type="application/json" hreflang="es" title="[Español] json"/><link href="https://planet.kde.org/tr/" rel="alternate" type="text/html" hreflang="tr" title="[Türkçe] html"/><link href="https://planet.kde.org/tr/index.xml" rel="alternate" type="application/rss+xml" hreflang="tr" title="[Türkçe] rss"/><link href="https://planet.kde.org/tr/atom.xml" rel="alternate" type="application/atom+xml" hreflang="tr" title="[Türkçe] atom"/><link href="https://planet.kde.org/tr/index.jsn" rel="alternate" type="application/json" hreflang="tr" title="[Türkçe] json"/><link href="https://planet.kde.org/ca/" rel="alternate" type="text/html" hreflang="ca" title="[Català] html"/><link href="https://planet.kde.org/ca/index.xml" rel="alternate" type="application/rss+xml" hreflang="ca" title="[Català] rss"/><link href="https://planet.kde.org/ca/atom.xml" rel="alternate" type="application/atom+xml" hreflang="ca" title="[Català] atom"/><link href="https://planet.kde.org/ca/index.jsn" rel="alternate" type="application/json" hreflang="ca" title="[Català] json"/><link href="https://planet.kde.org/de/" rel="alternate" type="text/html" hreflang="de" title="[Deutsch] html"/><link href="https://planet.kde.org/de/index.xml" rel="alternate" type="application/rss+xml" hreflang="de" title="[Deutsch] rss"/><link href="https://planet.kde.org/de/atom.xml" rel="alternate" type="application/atom+xml" hreflang="de" title="[Deutsch] atom"/><link href="https://planet.kde.org/de/index.jsn" rel="alternate" type="application/json" hreflang="de" title="[Deutsch] json"/><link href="https://planet.kde.org/eu/" rel="alternate" type="text/html" hreflang="eu" title="[Euskara] html"/><link href="https://planet.kde.org/eu/index.xml" rel="alternate" type="application/rss+xml" hreflang="eu" title="[Euskara] rss"/><link href="https://planet.kde.org/eu/atom.xml" rel="alternate" type="application/atom+xml" hreflang="eu" title="[Euskara] atom"/><link href="https://planet.kde.org/eu/index.jsn" rel="alternate" type="application/json" hreflang="eu" title="[Euskara] json"/><link href="https://planet.kde.org/it/" rel="alternate" type="text/html" hreflang="it" title="[Italiano] html"/><link href="https://planet.kde.org/it/index.xml" rel="alternate" type="application/rss+xml" hreflang="it" title="[Italiano] rss"/><link href="https://planet.kde.org/it/atom.xml" rel="alternate" type="application/atom+xml" hreflang="it" title="[Italiano] atom"/><link href="https://planet.kde.org/it/index.jsn" rel="alternate" type="application/json" hreflang="it" title="[Italiano] json"/><link href="https://planet.kde.org/nl/" rel="alternate" type="text/html" hreflang="nl" title="[Nederlands] html"/><link href="https://planet.kde.org/nl/index.xml" rel="alternate" type="application/rss+xml" hreflang="nl" title="[Nederlands] rss"/><link href="https://planet.kde.org/nl/atom.xml" rel="alternate" type="application/atom+xml" hreflang="nl" title="[Nederlands] atom"/><link href="https://planet.kde.org/nl/index.jsn" rel="alternate" type="application/json" hreflang="nl" title="[Nederlands] json"/><link href="https://planet.kde.org/sk/" rel="alternate" type="text/html" hreflang="sk" title="[Slovenčina] html"/><link href="https://planet.kde.org/sk/index.xml" rel="alternate" type="application/rss+xml" hreflang="sk" title="[Slovenčina] rss"/><link href="https://planet.kde.org/sk/atom.xml" rel="alternate" type="application/atom+xml" hreflang="sk" title="[Slovenčina] atom"/><link href="https://planet.kde.org/sk/index.jsn" rel="alternate" type="application/json" hreflang="sk" title="[Slovenčina] json"/><link href="https://planet.kde.org/uk/" rel="alternate" type="text/html" hreflang="uk" title="[Українська] html"/><link href="https://planet.kde.org/uk/index.xml" rel="alternate" type="application/rss+xml" hreflang="uk" title="[Українська] rss"/><link href="https://planet.kde.org/uk/atom.xml" rel="alternate" type="application/atom+xml" hreflang="uk" title="[Українська] atom"/><link href="https://planet.kde.org/uk/index.jsn" rel="alternate" type="application/json" hreflang="uk" title="[Українська] json"/><link href="https://planet.kde.org/fr/" rel="alternate" type="text/html" hreflang="fr" title="[Français] html"/><link href="https://planet.kde.org/fr/index.xml" rel="alternate" type="application/rss+xml" hreflang="fr" title="[Français] rss"/><link href="https://planet.kde.org/fr/atom.xml" rel="alternate" type="application/atom+xml" hreflang="fr" title="[Français] atom"/><link href="https://planet.kde.org/fr/index.jsn" rel="alternate" type="application/json" hreflang="fr" title="[Français] json"/><link href="https://planet.kde.org/sv/" rel="alternate" type="text/html" hreflang="sv" title="[Svenska] html"/><link href="https://planet.kde.org/sv/index.xml" rel="alternate" type="application/rss+xml" hreflang="sv" title="[Svenska] rss"/><link href="https://planet.kde.org/sv/atom.xml" rel="alternate" type="application/atom+xml" hreflang="sv" title="[Svenska] atom"/><link href="https://planet.kde.org/sv/index.jsn" rel="alternate" type="application/json" hreflang="sv" title="[Svenska] json"/><link href="https://planet.kde.org/ru/" rel="alternate" type="text/html" hreflang="ru" title="[Русский] html"/><link href="https://planet.kde.org/ru/index.xml" rel="alternate" type="application/rss+xml" hreflang="ru" title="[Русский] rss"/><link href="https://planet.kde.org/ru/atom.xml" rel="alternate" type="application/atom+xml" hreflang="ru" title="[Русский] atom"/><link href="https://planet.kde.org/ru/index.jsn" rel="alternate" type="application/json" hreflang="ru" title="[Русский] json"/><link href="https://planet.kde.org/ja/" rel="alternate" type="text/html" hreflang="ja" title="[日本語] html"/><link href="https://planet.kde.org/ja/index.xml" rel="alternate" type="application/rss+xml" hreflang="ja" title="[日本語] rss"/><link href="https://planet.kde.org/ja/atom.xml" rel="alternate" type="application/atom+xml" hreflang="ja" title="[日本語] atom"/><link href="https://planet.kde.org/ja/index.jsn" rel="alternate" type="application/json" hreflang="ja" title="[日本語] json"/><updated>2026-05-12T00:00:00+00:00</updated><icon>https://planet.kde.org/img/planet.png</icon><logo>https://planet.kde.org/img/planet.png</logo><id>https://planet.kde.org/pt-pt/</id><entry><title type="html">Plasma do KDE 6.6.5, Versão com Correcções de Erros de Maio</title><link href="https://kde.org/pt-pt/announcements/plasma/6/6.6.5/?utm_source=atom_feed" rel="alternate" type="text/html"/><id>https://kde.org/pt-pt/announcements/plasma/6/6.6.5/</id><author><name>Comunidade do KDE</name><uri>https://kde.org/pt-pt/</uri></author><published>2026-05-12T00:00:00+00:00</published><updated>2026-05-12T00:00:00+00:00</updated><content type="html"><![CDATA[<p>Hoje o KDE lança uma actualização com correcções de erros para o Plasma do KDE 6, com a versão 6.6.5.</p>
<p>O <a target="_blank" href="https://kde.org/pt-pt/announcements/plasma/6/6.6.0/">Plasma 6.6</a> foi lançado a Fevereiro de 2026 com diversas correcções de funcionalidades e novos módulos para ampliar a experiência do ambiente de trabalho.</p>
<p>This release adds a month’s worth of new translations and fixes from KDE’s contributors. As correcções de erros são tipicamente pequenas mas são importantes e incluem:</p>
<a target="_blank" href="https://kde.org/announcements/changelogs/plasma/6/6.6.4-6.6.5">Ver o registo de alterações completo</a>]]></content></entry><entry><title type="html">Plasma do KDE 6.6.4, Versão com Correcções de Erros de Abril</title><link href="https://kde.org/pt-pt/announcements/plasma/6/6.6.4/?utm_source=atom_feed" rel="alternate" type="text/html"/><id>https://kde.org/pt-pt/announcements/plasma/6/6.6.4/</id><author><name>Comunidade do KDE</name><uri>https://kde.org/pt-pt/</uri></author><published>2026-04-07T00:00:00+00:00</published><updated>2026-04-07T00:00:00+00:00</updated><content type="html"><![CDATA[<p>Hoje o KDE lança uma actualização com correcções de erros para o Plasma do KDE 6, com a versão 6.6.4.</p>
<p>O <a target="_blank" href="https://kde.org/pt-pt/announcements/plasma/6/6.6.0/">Plasma 6.6</a> foi lançado a Fevereiro de 2026 com diversas correcções de funcionalidades e novos módulos para ampliar a experiência do ambiente de trabalho.</p>
<p>This release adds three weeks’ worth of new translations and fixes from KDE’s contributors. As correcções de erros são tipicamente pequenas mas são importantes e incluem:</p>
<a target="_blank" href="https://kde.org/announcements/changelogs/plasma/6/6.6.3-6.6.4">Ver o registo de alterações completo</a>]]></content></entry><entry><title type="html">Plasma do KDE 6.6.3, Versão com Correcções de Erros de Março</title><link href="https://kde.org/pt-pt/announcements/plasma/6/6.6.3/?utm_source=atom_feed" rel="alternate" type="text/html"/><id>https://kde.org/pt-pt/announcements/plasma/6/6.6.3/</id><author><name>Comunidade do KDE</name><uri>https://kde.org/pt-pt/</uri></author><published>2026-03-17T00:00:00+00:00</published><updated>2026-03-17T00:00:00+00:00</updated><content type="html"><![CDATA[<p>Hoje o KDE lança uma actualização com correcções de erros para o Plasma do KDE 6, com a versão 6.6.3.</p>
<p>O <a target="_blank" href="https://kde.org/pt-pt/announcements/plasma/6/6.6.0/">Plasma 6.6</a> foi lançado a Fevereiro de 2026 com diversas correcções de funcionalidades e novos módulos para ampliar a experiência do ambiente de trabalho.</p>
<p>This release adds two weeks’ worth of new translations and fixes from KDE’s contributors. As correcções de erros são tipicamente pequenas mas são importantes e incluem:</p>
<a target="_blank" href="https://kde.org/announcements/changelogs/plasma/6/6.6.2-6.6.3">Ver o registo de alterações completo</a>]]></content></entry><entry><title type="html">Release GCompris 26.1</title><link href="https://www.gcompris.net/newsall-pt.html#2026-03-11?utm_source=atom_feed" rel="alternate" type="text/html"/><id>https://www.gcompris.net/newsall-pt.html#2026-03-11</id><author><name>GCompris</name><uri>https://gcompris.net/index-pt.html</uri></author><published>2026-03-10T23:00:00+00:00</published><updated>2026-03-10T23:00:00+00:00</updated><content type="html"><![CDATA[<div class="newscontent"><img alt="gcompris 26.1" class="col-xs-12 col-md-4" onclick="window.open('https://gcompris.net/news/images/r26.1.png')" src="https://gcompris.net/news/images/r26.1.png" style="float: right; padding-left: 10px; cursor: pointer;"/> <p>Today we are releasing GCompris version 26.1.</p> <p>It contains bug fixes and improvements on many activities.</p> <p>It is fully translated in the following languages:</p> <ul> <li class="puce">Árabe</li> <li class="puce">Búlgaro</li> <li class="puce">Bretão</li> <li class="puce">Catalão</li> <li class="puce">Catalão (Valenciano)</li> <li class="puce">Grego</li> <li class="puce">Espanhol</li> <li class="puce">Basco</li> <li class="puce">Francês</li> <li class="puce">Hebraico</li> <li class="puce">Croata</li> <li class="puce">Italiano</li> <li class="puce">Lituano</li> <li class="puce">Letão</li> <li class="puce">Malayalam</li> <li class="puce">Holandês</li> <li class="puce">Polaco</li> <li class="puce">Português do Brasil</li> <li class="puce">Russo</li> <li class="puce">Esloveno</li> <li class="puce">Albanês</li> <li class="puce">Sueco</li> <li class="puce">Turco</li> <li class="puce">Ucraniano</li> </ul> <p>It is also partially translated in the following languages:</p> <ul> <li class="puce">Azerbaijano (87%)</li> <li class="puce">Bielorrusso (83%)</li> <li class="puce">Checo (98%)</li> <li class="puce">Alemão (93%)</li> <li class="puce">Inglês Britânico (96%)</li> <li class="puce">Esperanto (96%)</li> <li class="puce">Estoniano (86%)</li> <li class="puce">Finlandês (92%)</li> <li class="puce">Galego (97%)</li> <li class="puce">Húngaro (97%)</li> <li class="puce">Indonésio (98%)</li> <li class="puce">Georgian (88%)</li> <li class="puce">Kannada (85%)</li> <li class="puce">Macedónio (81%)</li> <li class="puce">Norueguês (Nynorsk) (89%)</li> <li class="puce">Português (85%)</li> <li class="puce">Romeno (97%)</li> <li class="puce">Sanskrit (97%)</li> <li class="puce">Eslovaco (78%)</li> <li class="puce">Swahili (88%)</li> <li class="puce">Tamil (84%)</li> <li class="puce">Chinês Tradicional (85%)</li> </ul> <p>You can find packages of this new version for GNU/Linux, Windows, Android, and Raspberry Pi on the <a target="_blank" href="https://gcompris.net/downloads-pt.html">download page</a>. Also this update will soon be available in the Android Play store, the F-Droid repository and the Windows store.</p> <p>Thank you all, <br/>Timothée &amp; Johnny</p> <div></div> </div>]]></content></entry><entry><title type="html">Plasma do KDE 6.5.6, Versão com Correcções de Erros de Março</title><link href="https://kde.org/pt-pt/announcements/plasma/6/6.5.6/?utm_source=atom_feed" rel="alternate" type="text/html"/><id>https://kde.org/pt-pt/announcements/plasma/6/6.5.6/</id><author><name>Comunidade do KDE</name><uri>https://kde.org/pt-pt/</uri></author><published>2026-03-10T00:00:00+00:00</published><updated>2026-03-10T00:00:00+00:00</updated><content type="html"><![CDATA[<p>Hoje o KDE lança uma actualização com correcções de erros para o Plasma do KDE 6, com a versão 6.5.6.</p>
<p>O <a target="_blank" href="https://kde.org/pt-pt/announcements/plasma/6/6.5.0/">Plasma 6.5</a> foi lançado a Outubro de 2025 com diversas correcções de funcionalidades e novos módulos para ampliar a experiência do ambiente de trabalho.</p>
<p>This release adds two months’ worth of new translations and fixes from KDE’s contributors. As correcções de erros são tipicamente pequenas mas são importantes e incluem:</p>
<a target="_blank" href="https://kde.org/announcements/changelogs/plasma/6/6.5.5-6.5.6">Ver o registo de alterações completo</a>]]></content></entry><entry><title type="html">Release GCompris 26.0</title><link href="https://www.gcompris.net/newsall-pt.html#2026-02-04?utm_source=atom_feed" rel="alternate" type="text/html"/><id>https://www.gcompris.net/newsall-pt.html#2026-02-04</id><author><name>GCompris</name><uri>https://gcompris.net/index-pt.html</uri></author><published>2026-02-03T23:00:00+00:00</published><updated>2026-02-03T23:00:00+00:00</updated><content type="html"><![CDATA[<div class="newscontent"><img alt="gcompris 26.0" class="col-xs-12 col-md-4" onclick="window.open('https://gcompris.net/news/images/r26.0.png')" src="https://gcompris.net/news/images/r26.0.png" style="float: right; padding-left: 10px; cursor: pointer;"/> <p>Today we are releasing GCompris version 26.0.</p> <p>We are also releasing the first official version of our companion tool for teachers: GCompris-teachers! You can find more information about it on the <a target="_blank" href="https://gcompris.net/schools-pt.html#gcompris-teachers">schools page</a>.</p> <p>This new version contains 197 activities, including 2 new ones:</p> <ul> <li class="puce">"Drawing wheels" is an activity for drawing using a gear rotating in a cogwheel.</li> <li class="puce">"Multiple choice questions" is an MCQ activity. Note that this activity is hidden by default. It becomes visible after some datasets for it have been sent from GCompris-teachers.</li> </ul> <br/> <p>It also contains bug fixes and improvements on multiple activities.</p> <p>We ship translations for two more languages: Kannada and Tamil.</p> <p>It is fully translated in the following languages:</p> <ul> <li class="puce">Árabe</li> <li class="puce">Búlgaro</li> <li class="puce">Bretão</li> <li class="puce">Catalão</li> <li class="puce">Catalão (Valenciano)</li> <li class="puce">Grego</li> <li class="puce">Espanhol</li> <li class="puce">Basco</li> <li class="puce">Francês</li> <li class="puce">Hebraico</li> <li class="puce">Croata</li> <li class="puce">Italiano</li> <li class="puce">Lituano</li> <li class="puce">Letão</li> <li class="puce">Malayalam</li> <li class="puce">Holandês</li> <li class="puce">Polaco</li> <li class="puce">Português do Brasil</li> <li class="puce">Esloveno</li> <li class="puce">Albanês</li> <li class="puce">Sueco</li> <li class="puce">Turco</li> <li class="puce">Ucraniano</li> </ul> <p>It is also partially translated in the following languages:</p> <ul> <li class="puce">Azerbaijano (87%)</li> <li class="puce">Bielorrusso (83%)</li> <li class="puce">Checo (98%)</li> <li class="puce">Alemão (92%)</li> <li class="puce">Inglês Britânico (96%)</li> <li class="puce">Esperanto (96%)</li> <li class="puce">Estoniano (86%)</li> <li class="puce">Finlandês (91%)</li> <li class="puce">Galego (97%)</li> <li class="puce">Húngaro (97%)</li> <li class="puce">Indonésio (98%)</li> <li class="puce">Georgian (88%)</li> <li class="puce">Kannada (85%)</li> <li class="puce">Macedónio (81%)</li> <li class="puce">Norueguês (Nynorsk) (89%)</li> <li class="puce">Português (85%)</li> <li class="puce">Romeno (97%)</li> <li class="puce">Russo (97%)</li> <li class="puce">Sanskrit (97%)</li> <li class="puce">Eslovaco (78%)</li> <li class="puce">Swahili (88%)</li> <li class="puce">Tamil (84%)</li> <li class="puce">Chinês Tradicional (85%)</li> </ul> <p>You can find packages of this new version for GNU/Linux, Windows, Android and Raspberry Pi on the <a target="_blank" href="https://gcompris.net/downloads-pt.html">download page</a>. This update will also be available soon in the Android Play store, the F-Droid repository and the Windows store.</p> <p>Thank you all, <br/>Timothée &amp; Johnny</p> <div></div> </div>]]></content></entry><entry><title type="html">Release GCompris 25.1 and 4.3.1</title><link href="https://www.gcompris.net/newsall-pt.html#2025-05-21?utm_source=atom_feed" rel="alternate" type="text/html"/><id>https://www.gcompris.net/newsall-pt.html#2025-05-21</id><author><name>GCompris</name><uri>https://gcompris.net/index-pt.html</uri></author><published>2025-05-20T22:00:00+00:00</published><updated>2025-05-20T22:00:00+00:00</updated><content type="html"><![CDATA[<div class="newscontent"><img alt="gcompris 25.1 and 4.3.1" class="col-xs-12 col-md-4" onclick="window.open('https://gcompris.net/news/images/r25.1.png')" src="https://gcompris.net/news/images/r25.1.png" style="float: right; padding-left: 10px; cursor: pointer;"/> <p>Today we are releasing GCompris version 25.1.</p> <p>It contains bug fixes and graphics improvements on many activities.</p> <p>It is fully translated in the following languages:</p> <ul> <li class="puce">Árabe</li> <li class="puce">Búlgaro</li> <li class="puce">Bretão</li> <li class="puce">Catalão</li> <li class="puce">Catalão (Valenciano)</li> <li class="puce">Grego</li> <li class="puce">Espanhol</li> <li class="puce">Basco</li> <li class="puce">Francês</li> <li class="puce">Galego</li> <li class="puce">Croata</li> <li class="puce">Húngaro</li> <li class="puce">Indonésio</li> <li class="puce">Italiano</li> <li class="puce">Lituano</li> <li class="puce">Letão</li> <li class="puce">Malayalam</li> <li class="puce">Holandês</li> <li class="puce">Polaco</li> <li class="puce">Português do Brasil</li> <li class="puce">Romeno</li> <li class="puce">Russo</li> <li class="puce">Sanskrit</li> <li class="puce">Esloveno</li> <li class="puce">Albanês</li> <li class="puce">Sueco</li> <li class="puce">Turco</li> <li class="puce">Ucraniano</li> </ul> <p>It is also partially translated in the following languages:</p> <ul> <li class="puce">Azerbaijano (90%)</li> <li class="puce">Bielorrusso (86%)</li> <li class="puce">Checo (98%)</li> <li class="puce">Alemão (87%)</li> <li class="puce">Inglês Britânico (99%)</li> <li class="puce">Esperanto (99%)</li> <li class="puce">Estoniano (88%)</li> <li class="puce">Finlandês (93%)</li> <li class="puce">Hebraico (97%)</li> <li class="puce">Georgian (86%)</li> <li class="puce">Macedónio (83%)</li> <li class="puce">Norueguês (Nynorsk) (92%)</li> <li class="puce">Português (87%)</li> <li class="puce">Eslovaco (81%)</li> <li class="puce">Swahili (91%)</li> <li class="puce">Chinês Tradicional (87%)</li> </ul> <p>You can find packages of this new version for GNU/Linux, Windows, Android, and Raspberry Pi on the <a target="_blank" href="https://gcompris.net/downloads-pt.html">download page</a>. Also this update will soon be available in the Android Play store, the F-Droid repository and the Windows store.</p> <p>We are also releasing GCompris version 4.3.1.</p> <p>This is a maintenance version for 32bit systems which only contains a few backported bug fixes.</p> <p>Thank you all, <br/>Timothée &amp; Johnny</p> <div></div> </div>]]></content></entry><entry><title type="html">Release GCompris 25.0</title><link href="https://www.gcompris.net/newsall-pt.html#2025-01-30?utm_source=atom_feed" rel="alternate" type="text/html"/><id>https://www.gcompris.net/newsall-pt.html#2025-01-30</id><author><name>GCompris</name><uri>https://gcompris.net/index-pt.html</uri></author><published>2025-01-29T23:00:00+00:00</published><updated>2025-01-29T23:00:00+00:00</updated><content type="html"><![CDATA[<div class="newscontent"><img alt="gcompris 25.0" class="col-xs-12 col-md-4" onclick="window.open('https://gcompris.net/news/images/r25.0.png')" src="https://gcompris.net/news/images/r25.0.png" style="float: right; padding-left: 10px; cursor: pointer;"/> <p>Today we are releasing GCompris version 25.0.</p> <p>As you can see, we are now basing the major version number on the release year. This makes sense as we are doing one major version per year. It is also a good occasion to do it now to celebrate the 25 years of GCompris.</p> <p>This version adds translation for one more language: Sanskrit.</p> <p>This new version contains 195 activities, including 5 new ones:</p> <ul> <li class="puce">"Sketch" is an activity for drawing freely with multiple tools to let children explore their creativity.</li> <li class="puce">"Calculate with ten's complement" is the continuation of the existing ten's complement activities. This one helps the children to swap the numbers to easily compute a sum.</li> <li class="puce">"Vertical addition" is an activity to write an addition and solve it.</li> <li class="puce">"Vertical subtraction", is similar to the addition activity but for subtraction with the borrowing by regrouping method.</li> <li class="puce">"Vertical subtraction (compensation)", is similar to the subtraction one with the borrowing by compensation method.</li> </ul> <br/> <p>It contains bug fixes and graphics improvements on multiple activities.</p> <p>With the help of teachers, we rewrote a big part of the activities description to be clearer.</p> <p>When we switch language in the menu, the new language is now applied directly, without having to restart GCompris.</p> <p>On the technical side, it is also the first release using Qt6.</p> <p>We have also set the graphical renderer to direct3d11 by default on Windows.</p> <p>It is fully translated in the following languages:</p> <ul> <li class="puce">Árabe</li> <li class="puce">Búlgaro</li> <li class="puce">Bretão</li> <li class="puce">Catalão</li> <li class="puce">Catalão (Valenciano)</li> <li class="puce">Grego</li> <li class="puce">Espanhol</li> <li class="puce">Basco</li> <li class="puce">Francês</li> <li class="puce">Galego</li> <li class="puce">Croata</li> <li class="puce">Húngaro</li> <li class="puce">Italiano</li> <li class="puce">Letão</li> <li class="puce">Malayalam</li> <li class="puce">Holandês</li> <li class="puce">Polaco</li> <li class="puce">Português do Brasil</li> <li class="puce">Romeno</li> <li class="puce">Sanskrit</li> <li class="puce">Esloveno</li> <li class="puce">Sueco</li> <li class="puce">Turco</li> <li class="puce">Ucraniano</li> </ul> <p>It is also partially translated in the following languages:</p> <ul> <li class="puce">Azerbaijano (90%)</li> <li class="puce">Bielorrusso (86%)</li> <li class="puce">Checo (98%)</li> <li class="puce">Alemão (88%)</li> <li class="puce">Inglês Britânico (99%)</li> <li class="puce">Esperanto (99%)</li> <li class="puce">Estoniano (88%)</li> <li class="puce">Finlandês (91%)</li> <li class="puce">Hebraico (96%)</li> <li class="puce">Indonésio (93%)</li> <li class="puce">Georgian (85%)</li> <li class="puce">Lituano (92%)</li> <li class="puce">Macedónio (83%)</li> <li class="puce">Norueguês (Nynorsk) (94%)</li> <li class="puce">Português (89%)</li> <li class="puce">Russo (92%)</li> <li class="puce">Eslovaco (82%)</li> <li class="puce">Albanês (98%)</li> <li class="puce">Swahili (92%)</li> <li class="puce">Chinês Tradicional (88%)</li> </ul> <p>You can find packages of this new version for GNU/Linux, Windows, Android and Raspberry Pi on the <a target="_blank" href="https://gcompris.net/downloads-pt.html">download page</a>. This update will also be available soon in the Android Play store, the F-Droid repository and the Windows store.</p> <p>Thank you all, <br/>Timothée &amp; Johnny</p> <div></div> </div>]]></content></entry><entry><title type="html">Release GCompris 4.3</title><link href="https://www.gcompris.net/newsall-pt.html#2024-11-29?utm_source=atom_feed" rel="alternate" type="text/html"/><id>https://www.gcompris.net/newsall-pt.html#2024-11-29</id><author><name>GCompris</name><uri>https://gcompris.net/index-pt.html</uri></author><published>2024-11-28T23:00:00+00:00</published><updated>2024-11-28T23:00:00+00:00</updated><content type="html"><![CDATA[<div class="newscontent"><img alt="gcompris 4.3" class="col-xs-12 col-md-4" onclick="window.open('https://gcompris.net/news/images/gcompris-winter.png')" src="https://gcompris.net/news/images/gcompris-winter.png" style="float: right; padding-left: 10px; cursor: pointer;"/> <p>Today we are releasing GCompris version 4.3.</p> <p>It contains bug fixes and graphics improvements on multiple activities.</p> <p>It is fully translated in the following languages:</p> <ul> <li class="puce">Árabe</li> <li class="puce">Búlgaro</li> <li class="puce">Bretão</li> <li class="puce">Catalão</li> <li class="puce">Catalão (Valenciano)</li> <li class="puce">Grego</li> <li class="puce">Inglês Britânico</li> <li class="puce">Esperanto</li> <li class="puce">Espanhol</li> <li class="puce">Basco</li> <li class="puce">Francês</li> <li class="puce">Galego</li> <li class="puce">Croata</li> <li class="puce">Húngaro</li> <li class="puce">Indonésio</li> <li class="puce">Italiano</li> <li class="puce">Lituano</li> <li class="puce">Letão</li> <li class="puce">Malayalam</li> <li class="puce">Holandês</li> <li class="puce">Norueguês (Nynorsk)</li> <li class="puce">Polaco</li> <li class="puce">Português do Brasil</li> <li class="puce">Romeno</li> <li class="puce">Russo</li> <li class="puce">Esloveno</li> <li class="puce">Albanês</li> <li class="puce">Sueco</li> <li class="puce">Swahili</li> <li class="puce">Turco</li> <li class="puce">Ucraniano</li> </ul> <p>It is also partially translated in the following languages:</p> <ul> <li class="puce">Azerbaijano (97%)</li> <li class="puce">Bielorrusso (87%)</li> <li class="puce">Checo (97%)</li> <li class="puce">Alemão (96%)</li> <li class="puce">Estoniano (96%)</li> <li class="puce">Finlandês (95%)</li> <li class="puce">Hebraico (96%)</li> <li class="puce">Macedónio (90%)</li> <li class="puce">Português (96%)</li> <li class="puce">Eslovaco (84%)</li> <li class="puce">Chinês Tradicional (96%)</li> </ul> <p>You can find packages of this new version for GNU/Linux, Windows, Android, Raspberry Pi and macOS on the <a target="_blank" href="https://gcompris.net/downloads-pt.html">download page</a>. Also this update will soon be available in the Android Play store, the F-Droid repository and the Windows store.</p> <p>Thank you all, <br/>Timothée &amp; Johnny</p> <div></div> </div>]]></content></entry><entry><title type="html">Release GCompris 4.2</title><link href="https://www.gcompris.net/newsall-pt.html#2024-09-20?utm_source=atom_feed" rel="alternate" type="text/html"/><id>https://www.gcompris.net/newsall-pt.html#2024-09-20</id><author><name>GCompris</name><uri>https://gcompris.net/index-pt.html</uri></author><published>2024-09-19T22:00:00+00:00</published><updated>2024-09-19T22:00:00+00:00</updated><content type="html"><![CDATA[<div class="newscontent"><img alt="gcompris 4.2" class="col-xs-12 col-md-4" onclick="window.open('https://gcompris.net/news/images/r4.2.png')" src="https://gcompris.net/news/images/r4.2.png" style="float: right; padding-left: 10px; cursor: pointer;"/> <p>Today we are releasing GCompris version 4.2.</p> <p>It contains bug fixes and graphics improvements on multiple activities.</p> <p>This version adds translation for Latvian.</p> <p>It is fully translated in the following languages:</p> <ul> <li class="puce">Árabe</li> <li class="puce">Búlgaro</li> <li class="puce">Bretão</li> <li class="puce">Catalão</li> <li class="puce">Catalão (Valenciano)</li> <li class="puce">Grego</li> <li class="puce">Inglês Britânico</li> <li class="puce">Esperanto</li> <li class="puce">Espanhol</li> <li class="puce">Basco</li> <li class="puce">Francês</li> <li class="puce">Galego</li> <li class="puce">Croata</li> <li class="puce">Húngaro</li> <li class="puce">Indonésio</li> <li class="puce">Italiano</li> <li class="puce">Lituano</li> <li class="puce">Letão</li> <li class="puce">Malayalam</li> <li class="puce">Holandês</li> <li class="puce">Norueguês (Nynorsk)</li> <li class="puce">Polaco</li> <li class="puce">Português do Brasil</li> <li class="puce">Romeno</li> <li class="puce">Russo</li> <li class="puce">Esloveno</li> <li class="puce">Albanês</li> <li class="puce">Sueco</li> <li class="puce">Swahili</li> <li class="puce">Turco</li> <li class="puce">Ucraniano</li> </ul> <p>It is also partially translated in the following languages:</p> <ul> <li class="puce">Azerbaijano (97%)</li> <li class="puce">Bielorrusso (87%)</li> <li class="puce">Checo (97%)</li> <li class="puce">Alemão (96%)</li> <li class="puce">Estoniano (96%)</li> <li class="puce">Finlandês (95%)</li> <li class="puce">Hebraico (96%)</li> <li class="puce">Macedónio (90%)</li> <li class="puce">Português (96%)</li> <li class="puce">Eslovaco (84%)</li> <li class="puce">Chinês Tradicional (96%)</li> </ul> <p>You can find packages of this new version for GNU/Linux, Windows, Android, Raspberry Pi and macOS on the <a target="_blank" href="https://gcompris.net/downloads-pt.html">download page</a>. This update will also be available soon in the Android Play store, the F-Droid repository and the Windows store.</p> <p>Thank you all, <br/>Timothée &amp; Johnny</p> <div></div> </div>]]></content></entry><entry><title type="html">Kdenlive 24.08.0 released</title><link href="https://br.kde.org/2024/09/02/kdenlive-24-08-0-released/?utm_source=atom_feed" rel="alternate" type="text/html"/><id>https://br.kde.org/?p=2203</id><author><name>KDE Brasil</name><uri>https://br.kde.org</uri></author><published>2024-09-02T11:57:20+00:00</published><updated>2024-09-02T11:57:20+00:00</updated><content type="html"><![CDATA[<p>O Kdenlive 24.08 foi lançado, está atualização chega com novos recursos e aprimoramentos em especial para <em>Effects and Transitions</em>. Esta versão aumenta o desempenho na reprodução de sequências e na renderização de visualização da linha do tempo, melhora o tratamento de problemas de transcodificação ao importar grandes quantidades de clipes, adiciona perfis de transcodificação VAAPI e corrige a transcodificação de GPU para Nvidia. </p>
<p>Acompanhe mais detalhes na página oficial <br /><a target="_blank" href="https://kdenlive.org/en/2024/09/kdenlive-24-08-0-released/">https://kdenlive.org/en/2024/09/kdenlive-24-08-0-released/</a></p>


<p></p>]]></content></entry><entry><title type="html">O tutorial de Kirigami foi portado para o Qt6</title><link href="https://rabbitictranslator.com/pt-br/kirigami-port-qt6/?utm_source=atom_feed" rel="alternate" type="text/html"/><id>https://rabbitictranslator.com/pt-br/kirigami-port-qt6/</id><author><name>Thiago Masato Costa Sueto</name><uri>https://rabbitictranslator.com/pt-br/tags/planet-kde-ptbr/</uri></author><published>2024-06-14T00:00:00+00:00</published><updated>2024-06-14T00:00:00+00:00</updated><content type="html"><![CDATA[<p>Após três meses de trabalho, o <a rel="external" target="_blank" href="https://develop.kde.org/docs/getting-started/kirigami/">tutorial de Kirigami da KDE</a> foi portado para o Qt6.</p>
<p>Caso você não saiba o que é o Kirigami:</p>
<ul>
<li>O Qt fornece duas tecnologias GUI para criar aplicativos de desktop: o <a rel="external" target="_blank" href="https://doc.qt.io/qt-6/qtwidgets-index.html">QtWidgets</a> e o <a rel="external" target="_blank" href="https://doc.qt.io/qt-6/qtquick-index.html">QtQuick</a></li>
<li>O QtWidgets usa somente C++ enquanto o QtQuick usa QML (e opcionalmente C++ e JavaScript)</li>
<li><a rel="external" target="_blank" href="https://develop.kde.org/frameworks/kirigami/">Kirigami</a> é uma biblioteca feita pela KDE que extende o QtQuick fornecendo vários componentes vantajosos e que facilitam a vida</li>
</ul>
<p>Tecnicamente não houveram muitas mudanças de API no Kirigami. As mudanças principais foram:</p>
<ul>
<li>trocar do Kirigami.Overlaysheet pro Kirigami.Dialog</li>
<li>trocar de actions.&#123;main,left,right} para apenas actions</li>
<li>trocar do Kirigami.BasicListItem para o Controls.ItemDelegate ou o Kirigami.TitleSubtitle e afins</li>
</ul>
<p>Todas são APIs fáceis de entender, então desenvolvedores de apps não deverão ter problemas portando para elas. Mesmo que seja o caso, temos uma <a rel="external" target="_blank" href="https://invent.kde.org/frameworks/kirigami/-/wikis/Porting-applications-to-KF6-version-of-Kirigami">página da wiki com instruções sobre como portar para Kirigami com Qt6</a>.</p>
<p>O maior desafio na verdade veio de outro lugar: o novo uso de registrar módulos QML de modo declarativo (declarative registration).</p>
<p>O jeito antigo de registrar novos tipos do C++ pro lado do QML involvia um contexto global ou chamadas de API específicas, o que geralmente se traduz em instanciar o objeto no código C++, podendo ser inconveniente. A depender do jeito que você registra e como a API foi chamada, também pode vir a ser necessário implementar uma factory.</p>
<p>O novo jeito envolve criar módulos QML diretamente pelo CMake e adicionar uma ou duas macros na classe que você quer expor, de modo a não precisar instanciar nada do lado do C++. Como bônus, também dá para adicionar recursos QML diretamente pelo CMake ao invés de escrever código XML.</p>
<p>A API usada para o novo jeito de registrar de modo declarativo é o qt_add_qml_module(), mas para nossas coisas da KDE usamos o ecm_add_qml_module(), que remove um monte do boilerplate.</p>
<p>Uma consequência do novo método de registrar módulos QML é que tipicamente espera-se que URIs usem o esquema de DNS reverso, rDNS (por exemplo, org.kde.kirigami.delegates) e também que o resource path se torna longo demais:</p>
<pre class="giallo" style="color: #CDD6F4; background-color: #1E1E2E;"><code data-lang="plain"><span class="giallo-l"><span>&lt;prefixo_do_recurso&gt;&lt;URI_de_import&gt;&lt;arquivo&gt;</span></span></code></pre>
<p>Por exemplo, “qrc:/qt/qml/org/kde/example/SomeModule.qml”.</p>
<p>Isso leva a uma mudança de API: do engine.load(“qrc:/qt/qml/org/kde/example/SomeModule.qml”) para o engine.loadFromModule(“org.kde.example”, “SomeModule”), que é muito mais curto.</p>
<p>O <a rel="external" target="_blank" href="https://doc.qt.io/qt-6/qqmlapplicationengine.html#loadFromModule">loadFromModule()</a> no entanto requer um módulo QML (evidentemente), que precisa começar com uma letra maiúscula. Isso significa mudar toda instância de main.qml em Main.qml, e em todo lugar no tutorial. É uma tarefa cansativa, um chore task.</p>
<p>Um benefício legal de portar pro Qt6 foi que não é mais necessário especificar versões de import nos arquivos QML. Para usuários da API isso basicamente significa não ligar para o versionamento do app, e para escritores de tutorial isso significa não precisar caçar a versão mínima de import. Mas esta também é uma tarefa abrangente e cansativa.</p>
<p>Eu comecei a portar por este ponto por ser a parte que visualmente melhor indica que o conteúdo é em Qt6.</p>
<h2 id="melhorias-opcionais">Melhorias opcionais<a class="zola-anchor" href="#melhorias-opcionais" aria-label="Anchor link for: melhorias-opcionais">🔗</a></h2>
<p>Um problema antigo com o tutorial de Kirigami sempre foi as capturas de tela não atualizadas. Especificamente:</p>
<ul>
<li>imagens que não refletiam o código</li>
<li>imagens que tinham ícones de janela X11</li>
<li>imagens que tinham ícones de janela Wayland</li>
<li>imagens que simplesmente não tavam bonitas</li>
<li>imagens mal-posicionadas</li>
</ul>
<p>Uma vez que o produto só pode ser tão bom quanto sua documentação, em outras palavras, o produto <em>é</em> a documentação, capturas de tela tem suma importância. Se o produto é exposto de maneira não profissional, ele se torna pouco atrativo.</p>
<p>A mudança de API de Overlaysheet para Dialog era uma mudança drástica na interface. Já que eu já precisava atualizar as capturas de tela pro Dialog mesmo, eu podia usar o <a rel="external" target="_blank" href="https://invent.kde.org/frameworks/kirigami/-/merge_requests/1519">novo redesign do Dialog do Carl Schwann</a>, que tem aparência ótima.</p>
<img src="//rabbitictranslator.com/2024/06/kirigami-dialog.webp" >
<p>A mudança de API nas Kirigami actions também levou a mudanças de interface, mas na interface para telefones e tablets. O Plasma Mobile também era pouco representado no tutorial, o que exigia atualizações.</p>
<img src="//rabbitictranslator.com/2024/06/kirigami-actions.png" >
<p>Então eu resolvi atualizar a maioria das capturas de tela, o que levou a algumas outras coisas em seguida:</p>
<ul>
<li>fazer as imagens representarem o código de exemplo</li>
<li>fazer o código de exemplo representar as imagens</li>
<li>arrumar o espaçamento entre imagens comparativas</li>
<li>arrumar o posicionamento das imagens</li>
<li>adicionar um arquivo desktop pros exemplos para que ícones de janela aparecessem no Wayland</li>
<li>explicar como instalar o aplicativo para que ícones de janela aparecessem no Wayland</li>
</ul>
<p>As duas primeiras implicavam em mudanças no design do app, usando as mesmas questões que vou falar na próxima seção desta postagem de blog. As duas últimas na verdade foram consequência das minhas atualizações incompletas de anos atrás.</p>
<p>Originalmente, o tutorial de Kirigami tinha vários problemas óbvios como código faltando, poucas imagens, quase nenhum link, nenhuma instrução de compilação ou de como rodar, etc. Quando eu atualizei ele anos atrás, eu não fui até o fim e também não tinha a expertise necessária.</p>
<p>Para que ícones de janela apareçam no Wayland, o aplicativo precisa ser instalado no sistema e fornecer um arquivo desktop. No X11 é possível ignorar o requerimento do arquivo desktop, mas o aplicativo ainda precisa ser instalado. Já que antes eu não sabia como instalar os aplicativos corretamente, eu apenas forneci instruções de como compilar e como consequência não pude fornecer capturas de tela com ícones de janelas. O atual tutorial finalmente tem isso.</p>
<p>Além disso, agora, já que o código está correto e fornece um arquivo desktop e as instruções de instalação certas, qualquer um que venha a testar o tutorial no futuro (eu inclusive) vai achar muito mais fácil de testar. Agora é possível copiar e colar o código diretamente com confiança de o projeto vai estar como deve. Quem teria imaginado que fornecer código reproduzível e instruções ajuda no QA e economiza tempo? /s</p>
<p>No estado atual, a não ser que hajam mudanças drásticas na API ou no tutorial, a maioria das partes em que eu mexi deverão durar pelo menos até o Plasma 7.</p>
<h2 id="desafios-de-documentacao">Desafios de documentação<a class="zola-anchor" href="#desafios-de-documentacao" aria-label="Anchor link for: desafios-de-documentacao">🔗</a></h2>
<p>Para quem mexe com documentação, atualizar um tutorial de aplicativos desktop não é tarefa pequena ou simples. Tem várias coisas para se ter em mente:</p>
<ul>
<li>que design de app devo recomendar para os usuários?</li>
<li>que design de app é de fato usado pelos desenvolvedores?</li>
<li>que design de app é esperado de upstream?</li>
<li>que API merece ser mencionada?</li>
<li>há palavras chave para o leitor saber o que deve pesquisar para achar mais informações?</li>
<li>como tornar os exemplos de código mais didáticos?</li>
<li>como criar exemplos de código que ficam bonitos nas capturas de tela?</li>
<li>que nível de explicação devo usar?</li>
<li>o que devo remover?</li>
<li>quando os exemplos de código devem ser resumidos ou completos?</li>
<li>foram apresentados todos os conceitos necessários para o leitor terminar o tutorial?</li>
<li>o que deve ser parte do tutorial e o que deve ser apenas uma nota?</li>
<li>que práticas de documentação devo seguir ou ignorar?</li>
<li>devo incluir workarounds para problemas comuns?</li>
<li>devo incluir menções de possíveis problemas?</li>
<li>e onde?</li>
<li>como as capturas de tela devem estar posicionadas na página?</li>
<li>que seções devo usar para esta página?</li>
<li>qual ordem lógica deve ser usada para as seções?</li>
<li>isso está consistente em todas as partes do tutorial que toquei?</li>
<li>ainda faltam capturas de tela?</li>
<li>ainda faltam links?</li>
<li>o que eu devo deixar para fazer depois?</li>
</ul>
<p>É necessário ter essas questões em mente e tomar decisões a respeito delas para poder lidar com a tarefa. Naturalmente, isso não significa que você deve lidar com todas ao mesmo tempo, apenas que você deve tê-las em mente.</p>
<p>As questões de design de aplicativos foram umas das mais difíceis de tratar, não tanto em relação aos exemplos de código usados, mas mais devido à estrutura de arquivos do projeto, que pode ser extremamente maleável em C++. Mesmo olhando apenas nos projetos da KDE eu encontrei uns 5 tipos diferentes de estrutura de projeto! E na maioria das vezes indo contra recomendações do Qt. Por exemplo, se seguirmos o Qt à letra, eles recomendariam usar uma estrutura de arquivos similar ao URI (como src/org/kde/example/AlgumModulo.qml) enquanto a KDE quase nunca faz isso (src/AlgumModulo.qml or src/qml/AlgumModulo.qml or src/algumsubdir/AlgumModulo.qml).</p>
<p>Decidi ir com uma abordagem híbrida parecida com a <a rel="external" target="_blank" href="https://www.qt.io/blog/implicit-imports-vs.-qml-modules-in-qt-6">solução 2 desta postagem do blog do Qt</a> com o Main.qml na pasta src/ e outros módulos QML numa subpasta (ou em múltiplas subpastas), já que é mais didático e escala melhor.</p>
<p>Outro aspecto para o qual você não deve se render é a desmotivação causada por tarefas cansativas ou entediantes! Pensar no design do aplicativo ou tentar descobrir jeitos didáticos de resolve problemas costuma ser desafiador, interessante ou divertido, mas tarefas entediantes sugam sua alma.</p>
<p>Para mim a parte mais exaustiva foi atualizar as capturas de tela. Eu precisei criar por volta de 200 dessas, seja por conta de erros ou de mudanças de design/didática. Acabei atualizando aproximadamente 51 imagens do tutorial, e isso ainda nem é tudo. Faz sentido, afinal, já que o tutorial do Kirigami tem 30 páginas de conteúdo (e eu mexi em 19 delas).</p>
<p>De maneira geral, lidar com documentação e tutoriais de API requer que o escritor passe por todo esse trabalho para que o leitor não passe por nenhum trabalho a mais e possa focuar só no que é necessário.</p>
<h2 id="como-aprender-mais-sobre">Como aprender mais sobre<a class="zola-anchor" href="#como-aprender-mais-sobre" aria-label="Anchor link for: como-aprender-mais-sobre">🔗</a></h2>
<p>Para aprender sobre mais questões de documentação como esta e lidar com elas, dois excelentes materiais que eu recomendo que são gratuitos são o <a rel="external" target="_blank" href="https://developers.google.com/style">Guia de Estilo de Documentação para desenvolvedores da Google (em inglês)</a> e o <a rel="external" target="_blank" href="https://developers.google.com/tech-writing">Curso de Escrita Técnica da Google (em inglês)</a>. Não seguimos estritamente essas diretrizes, mas elas são diretas e bons pontos de entrada.</p>
<p>Também temos o <a rel="external" target="_blank" href="https://develop.kde.org/docs/contribute/style/">Guia de Estilo do KDE Develop (em inglês)</a> que trata de certas coisas que fazemos apenas no KDE Develop. Em particular quero mencionar a seção final: <a rel="external" target="_blank" href="https://develop.kde.org/docs/contribute/style/#standard-documentation-practices">Siga práticas de documentação onde fizer sentido</a>, que lista vários outros recursos para aprender sobre escrita técnica, tendo conteúdos curados especialmente por mim.</p>
<p>A KDE tem uma <a rel="external" target="_blank" href="https://community.kde.org/Get_Involved/documentation">página da wiki para documentação</a> explicando as diferentes áreas de documentação em que você pode contribuir na KDE, mencionando também as tecnologias que usamos para isso.</p>
<p>Além de coisas de coisas de documentação, temos também uma <a rel="external" target="_blank" href="https://develop.kde.org/docs/getting-started/building/help-learn/">página com recursos dedicados para aprender desenvolvimento com Qt</a>, incluindo uma <a rel="external" target="_blank" href="https://community.kde.org/Get_Involved/development/Learn">lista curada de materiais de estudo</a>.</p>
<p>E eu tenho um repositório pessoal chamado <a rel="external" target="_blank" href="https://codeberg.org/herzenschein/minimal-qml6-examples">minimal-qml6-examples</a> que está ainda incompleto mas fornece vários exemplos de código em Qt puro explicando o essencial de como registrar módulos QML usando a nova API do CMake.</p>
<p>Exclusivamente para os leitores brasileiros, também tenho um repositório chamado <a rel="external" target="_blank" href="https://github.com/herzenschein/materiais-de-aprendizado-qt">Materiais de aprendizado Qt</a> que explica o básico do que é o Qt e fornece uma quantidade gigantesca de links para você aprender Qt.</p>]]></content></entry><entry><title type="html">Release GCompris 4.1</title><link href="https://www.gcompris.net/newsall-pt.html#2024-05-23?utm_source=atom_feed" rel="alternate" type="text/html"/><id>https://www.gcompris.net/newsall-pt.html#2024-05-23</id><author><name>GCompris</name><uri>https://gcompris.net/index-pt.html</uri></author><published>2024-05-22T22:00:00+00:00</published><updated>2024-05-22T22:00:00+00:00</updated><content type="html"><![CDATA[<div class="newscontent"><img alt="gcompris 4.1" class="col-xs-12 col-md-4" onclick="window.open('https://gcompris.net/news/images/r4.1.png')" src="https://gcompris.net/news/images/r4.1.png" style="float: right; padding-left: 10px; cursor: pointer;"/> <p>Today we are releasing GCompris version 4.1.</p> <p>It contains bug fixes and graphics improvements on multiple activities.</p> <p>It is fully translated in the following languages:</p> <ul> <li class="puce">Árabe</li> <li class="puce">Búlgaro</li> <li class="puce">Bretão</li> <li class="puce">Catalão</li> <li class="puce">Catalão (Valenciano)</li> <li class="puce">Grego</li> <li class="puce">Espanhol</li> <li class="puce">Basco</li> <li class="puce">Francês</li> <li class="puce">Galego</li> <li class="puce">Croata</li> <li class="puce">Húngaro</li> <li class="puce">Italiano</li> <li class="puce">Lituano</li> <li class="puce">Malayalam</li> <li class="puce">Holandês</li> <li class="puce">Norueguês (Nynorsk)</li> <li class="puce">Polaco</li> <li class="puce">Português do Brasil</li> <li class="puce">Romeno</li> <li class="puce">Russo</li> <li class="puce">Esloveno</li> <li class="puce">Sueco</li> <li class="puce">Turco</li> <li class="puce">Ucraniano</li> </ul> <p>It is also partially translated in the following languages:</p> <ul> <li class="puce">Azerbaijano (97%)</li> <li class="puce">Bielorrusso (86%)</li> <li class="puce">Checo (95%)</li> <li class="puce">Alemão (95%)</li> <li class="puce">Inglês Britânico (95%)</li> <li class="puce">Esperanto (99%)</li> <li class="puce">Estoniano (95%)</li> <li class="puce">Finlandês (94%)</li> <li class="puce">Hebraico (95%)</li> <li class="puce">Indonésio (99%)</li> <li class="puce">Macedónio (90%)</li> <li class="puce">Português (95%)</li> <li class="puce">Eslovaco (83%)</li> <li class="puce">Albanês (99%)</li> <li class="puce">Swahili (99%)</li> <li class="puce">Chinês Tradicional (95%)</li> </ul> <p>You can find packages of this new version for GNU/Linux, Windows, Android, Raspberry Pi and macOS on the <a target="_blank" href="https://gcompris.net/downloads-pt.html">download page</a>. This update will also be available soon in the Android Play store, the F-Droid repository and the Windows store.</p> <p>Thank you all, <br/>Timothée &amp; Johnny</p> <div></div> </div>]]></content></entry><entry><title type="html">Release GCompris 4.0</title><link href="https://www.gcompris.net/newsall-pt.html#2024-02-21?utm_source=atom_feed" rel="alternate" type="text/html"/><id>https://www.gcompris.net/newsall-pt.html#2024-02-21</id><author><name>GCompris</name><uri>https://gcompris.net/index-pt.html</uri></author><published>2024-02-20T23:00:00+00:00</published><updated>2024-02-20T23:00:00+00:00</updated><content type="html"><![CDATA[<div class="newscontent"><img alt="gcompris 4.0" class="col-xs-12 col-md-4" onclick="window.open('https://gcompris.net/news/images/r4.0.png')" src="https://gcompris.net/news/images/r4.0.png" style="float: right; padding-left: 10px; cursor: pointer;"/> <p>Today we are releasing GCompris version 4.0.</p> <p>This version adds translations for 3 more languages: Bulgarian, Galician and Swahili.</p> <p>It contains 190 activities, including 8 new ones:</p> <ul> <li class="puce">"Grammar classes" is an activity to learn to identify words grammatical classes, one class at a time.</li> <li class="puce">"Grammar analysis" is similar to the previous one, but with several classes requested for each sentence.</li> <li class="puce">"Calcudoku" is an arithmetic game where the goal is to fill a grid with numbers according to specific rules.</li> <li class="puce">With "Guess 24", using the 4 given numbers and the operators, find the number 24!</li> <li class="puce">In "Frieze", reproduce and complete the different friezes.</li> <li class="puce">"Read a graduated line" is an activity where you need to find a value represented on a graduated line.</li> <li class="puce">In "Use a graduated line", place the given value on the graduated line.</li> <li class="puce">In "Adjacent numbers", learn which numbers come before or after the given sequence.</li> </ul> <br/> <p>It contains bug fixes and graphics improvements on multiple activities.</p> <p>One major milestone has been reached with this version: after almost 9 years of work, the task of reworking all the graphics to fit the guidelines has been completed!</p> <p>It is fully translated in the following languages:</p> <ul> <li class="puce">Árabe</li> <li class="puce">Búlgaro</li> <li class="puce">Bretão</li> <li class="puce">Catalão</li> <li class="puce">Catalão (Valenciano)</li> <li class="puce">Grego</li> <li class="puce">Espanhol</li> <li class="puce">Basco</li> <li class="puce">Francês</li> <li class="puce">Galego</li> <li class="puce">Croata</li> <li class="puce">Húngaro</li> <li class="puce">Italiano</li> <li class="puce">Lituano</li> <li class="puce">Malayalam</li> <li class="puce">Holandês</li> <li class="puce">Polaco</li> <li class="puce">Português do Brasil</li> <li class="puce">Romeno</li> <li class="puce">Esloveno</li> <li class="puce">Turco</li> <li class="puce">Ucraniano</li> </ul> <p>It is also partially translated in the following languages:</p> <ul> <li class="puce">Azerbaijano (97%)</li> <li class="puce">Bielorrusso (86%)</li> <li class="puce">Checo (94%)</li> <li class="puce">Alemão (95%)</li> <li class="puce">Inglês Britânico (95%)</li> <li class="puce">Esperanto (99%)</li> <li class="puce">Estoniano (95%)</li> <li class="puce">Finlandês (94%)</li> <li class="puce">Hebraico (95%)</li> <li class="puce">Indonésio (95%)</li> <li class="puce">Macedónio (90%)</li> <li class="puce">Norueguês (Nynorsk) (95%)</li> <li class="puce">Português (95%)</li> <li class="puce">Russo (95%)</li> <li class="puce">Eslovaco (83%)</li> <li class="puce">Albanês (99%)</li> <li class="puce">Sueco (95%)</li> <li class="puce">Swahili (99%)</li> <li class="puce">Chinês Tradicional (95%)</li> </ul> <p>You can find packages of this new version for GNU/Linux, Windows, Android, Raspberry Pi and macOS on the <a target="_blank" href="https://gcompris.net/downloads-pt.html">download page</a>. This update will also be available soon in the Android Play store, the F-Droid repository and the Windows store.</p> <p>Thank you all, <br/>Timothée &amp; Johnny</p> <div></div> </div>]]></content></entry><entry><title type="html">Precisamos de uma pasta config limpa!</title><link href="https://rabbitictranslator.com/pt-br/kconfig/?utm_source=atom_feed" rel="alternate" type="text/html"/><id>https://rabbitictranslator.com/pt-br/kconfig/</id><author><name>Thiago Masato Costa Sueto</name><uri>https://rabbitictranslator.com/pt-br/tags/planet-kde-ptbr/</uri></author><published>2023-07-10T00:00:00+00:00</published><updated>2023-07-10T00:00:00+00:00</updated><content type="html"><![CDATA[<p>E é simples de conseguir isso, na real.</p>
<p>Mas qual o lance disso afinal?</p>
<h2 id="o-problema">O problema<a class="zola-anchor" href="#o-problema" aria-label="Anchor link for: o-problema">🔗</a></h2>
<p>Já há tempos existe a reclamação de que a pasta ~/.config/ em sistemas Linux pode ficar infestada de arquivos de configuração. Esse é o caso com software da KDE também.</p>
<p>A ideia que proponho é de colocar esses arquivos em subpastas dentro de ~/.config/.</p>
<p>A especificação XDG Base Directory da Freedesktop apenas menciona de modo geral que arquivos de configuração tradicionais precisam ir dentro de XDG_CONFIG_DIRS. É só tacar lá que funciona. Certamente não há nada de <em>errado</em> em simplesmente enchar a pasta ~/.config/ com eles.</p>
<p>Mas a especificação também não é tão específica com isso, ela se preocupa mais com o papel desses arquivos e os caminhos usados para procurar por eles. Contanto que esteja dentro do XDG_CONFIG_DIRS, funciona. Em outras palavras, os aplicativos podem armazenar seus arquivos de configuração de usuário em ~/.config/ e em ~/.config/appdir/.</p>
<p>Isso fica bem claro perto do fim da especificação:</p>
<blockquote>
<p>Specifications may reference this specification by specifying the location of a configuration file as $XDG_CONFIG_DIRS/subdir/filename. This implies that:</p>
<ul>
<li>Default configuration files should be installed to $sysconfdir/xdg/subdir/filename with $sysconfdir defaulting to /etc.</li>
<li>A user-specific version of the configuration file may be created in $XDG_CONFIG_HOME/subdir/filename, taking into account the default value for $XDG_CONFIG_HOME if $XDG_CONFIG_HOME is not set.</li>
<li>Lookups of the configuration file should search for ./subdir/filename relative to all base directories indicated by $XDG_CONFIG_HOME and $XDG_CONFIG_DIRS . If an environment variable is either not set or empty, its default value as defined by this specification should be used instead.</li>
</ul>
</blockquote>
<p>O spec impõe a procura desse tipo de subpasta se existir.</p>
<p>Isso é inclusive o <a rel="external" target="_blank" href="https://doc.qt.io/qt-6/qsettings.html#platform-specific-notes">padrão do QSettings do Qt</a> se você definir um nome de organização:</p>
<p><code>QSettings settings("MySoft", "Star Runner");</code></p>
<p>em que "MySoft" é o nome da organização e "Star Runner" é o nome do aplicativo, isso resulta no arquivo:</p>
<p><code>~/.config/MySoft/Star Runner.conf</code></p>
<p>Então não tem efetivamente uma razão técnica para evitar armazenar arquivos de configuração dentro de ~/.config/subdir/. E mesmo assim guardamos a maioria deles direto em ~/.config/.</p>
<h2 id="o-processo-de-organizacao">O processo de organização<a class="zola-anchor" href="#o-processo-de-organizacao" aria-label="Anchor link for: o-processo-de-organizacao">🔗</a></h2>
<p>Se você, que nem eu, realmente desgosta de uma pasta ~/.config/ entupida, acho que você vai gostar deste artigo: você pode mudar o status quo. Só acompanhe o texto por enquanto.</p>
<p>Levando as coisas acima em consideração, você precisa cogitar certas coisas:</p>
<ul>
<li>Programas podem não ter só um, e sim múltiplos arquivos de configuração</li>
</ul>
<p>O Kate por exemplo gera até quatro (talvez mais?) arquivos de configuração de usuário: katerc, kateschemarc, katevirc, katemetainfos.</p>
<p>Disso vem a conclusão natural: é só colocar os arquivos em ~/.config/kate/. Todos os quatro arquivos do mesmo app ficam juntos.</p>
<p>Isso funciona bem para quem quer, por exemplo, escolher quais arquivos de configuração vão pro seu backup. Ao trocar de sistema, você pode fazer um backup da pasta do Kate e só.</p>
<ul>
<li>Nem todo programa é um aplicativo completo por si só</li>
</ul>
<p>Alguns programas são componentes essenciais do sistema. O KWIn, KIO, Plasma, KScreen, KRunner, Plasma Addons, Plasma Integration, Plasma Thunderbolt, essas coisas nunca são publicadas separadamente como aplicativos estilo o Kate.</p>
<p>Algumas coisas como o Spectacle, por exemplo, são ambíguas: o Spectacle é um app completo por si só, mas (atualmente) só pode ser usado no Plasma.</p>
<p>Poderíamos então armazenar todos esses arquivos no mesmo grupo, ~/.config/plasma/? Ou manter cada coisa em sua própria pasta ~/.config/appdir/?</p>
<ul>
<li>Existem vários grupos de arquivos possíveis</li>
</ul>
<p>O Plasma por exemplo não é "só" o Plasma, mas também o Plasma Desktop, o Plasma Mobile, o Plasma Bigscreen, o Plasma Nano, etc. Precisaríamos então de algo como ~/.config/plasma-desktop, ~/.config/plasma-mobile/, and por aí vai.</p>
<p>Dentro do ~/.config/plasma-desktop/, por exemplo, se veria arquivos como o plasmashellrc ou o plasma-org.kde.plasma.desktop-appletsrc.</p>
<ul>
<li>Todo programa da KDE é feito pela comunidade KDE</li>
</ul>
<p>...Obviamente. A conclusão natural seria de ter todos os programas da KDE dentro de ~/.config/kde/appdir/, não? Seria tão conveniente para os usuários pode simplesmente copiar a pasta ~/.config/kde/ ao trocar de sistema, certo?</p>
<p>Bem...</p>
<ul>
<li>Alguns programas da KDE são agnośticos</li>
</ul>
<p>Eu acho perfeitamente aceitável que apps completos por si só sejam independentes do sistema ao nível dos arquivos de configuração também. O que quero dizer é que <em>impor</em> ou mesmo <em>sugerir</em> que aplicativos assim que estão sob o nome da KDE armazenem seus arquivos de configuração dentro de ~/.config/kde/appdir/ não daria certo.</p>
<p>Os apps devem ser livres para afirmar sem sombra de dúvidas que eles funcionam em qualquer ambiente e que eles tratam esses ambientes como primeira classe.</p>
<p>Ademais, o ponto anterior só funcionaria se todo programa da KDE ficasse dentro de uma pasta ~/.config/kde/. Afinal, se você tivesse aplicativos individuais com sua própria ~/.config/appdir/, por quê você iria procurar por outros aplicativos inidividuais dentro do ~/.config/kde/? Isso seria inconsistente.</p>
<ul>
<li>Alguns programas que parecem ser da KDE podem não ser da KDE</li>
</ul>
<p>Este é o caso com KCMs.</p>
<p>A ideia dos KCMs é que eles podem ser embutidos dentro das Configurações do Sistema <em>independente de quem os criou</em>. Eles são feitos para serem úteis para terceiros também. Terceiros neste caso significa qualquer um que não esteja usando a infraestrutura da KDE para a distribuição direta de seu software, como distros do Linux, desenvolvedores não afiliados à KDE, empresas fornecendo seus próprios módulos.</p>
<p>Faria sentido então ter ~/.config/kcm/? Ou faria mais sentido que cada KCM tenha seu ~/.config/appdir/? Ou deveríamos então juntar esses arquivos todos dentro de ~/.config/plasma-&#123;desktop,mobile}/appdir/, já que as Configurações do Sistema são tão essenciais para o Plasma?</p>
<h2 id="a-proposta">A proposta<a class="zola-anchor" href="#a-proposta" aria-label="Anchor link for: a-proposta">🔗</a></h2>
<p>O seguinte são minhas opiniões pessoais sobre o que fazer com arquivos de configuração, baseadas nas questões acima. Embora a seção anterior sirva para reflexão, a proposta em si é bem simples:</p>
<ul>
<li>Aplicativos individuais: ~/.config/appdir/</li>
<li>Programas essenciais: ~/.config/kwin/, ~/.config/kio/, ~/.config/krunner/, ~/.config/spectacle, ~/.config/plasma-desktop/, ~/.config/plasma-mobile/</li>
<li>KCMs: ~/.config/kcm/ OU ~/.config/systemsettings/</li>
</ul>
<p>Não creio que seja necessário complicar as coisas com mais que uma subpasta dentro de ~/.config/. Além disso, a especificação do XDG Base Directory só impõe explicitamente a procura de um nível de subpastas dentro do XDG_CONFIG_DIRS.</p>
<p>Que tal deixar aplicativos individuais serem individuais e completos por si só. Apps essenciais que podem ser considerados individuais e completos por si só podem ser simplesmente isso mesmo.</p>
<p>Requisitos essenciais para produtos do Plasma podem ser postos num só lugar.</p>
<p>Considere talvez unir os KCMs em uma pasta separada sem relação direta com o Plasma para encorajar desenvolvedores terceiros.</p>
<h2 id="a-implementacao">A implementação<a class="zola-anchor" href="#a-implementacao" aria-label="Anchor link for: a-implementacao">🔗</a></h2>
<p>A razão de eu ter escrito este artigo <em>agora</em> e não antes é porque agora entendo <em>bem</em> como implementar isso.</p>
<p>Na verdade é bem simples. O arquivo de configuração padrão para a KDE segue o formato INI. Por exemplo, tendo um arquivo <code>myappconfigrc</code>:</p>
<pre class="giallo" style="color: #CDD6F4; background-color: #1E1E2E;"><code data-lang="ini"><span class="giallo-l"><span style="color: #9399B2;">[</span><span style="color: #F9E2AF;">Nome do Grupo</span><span style="color: #9399B2;">]</span></span>
<span class="giallo-l"><span style="color: #89B4FA;">Entrada1</span><span style="color: #94E2D5;">=</span><span>Valor1</span></span>
<span class="giallo-l"><span style="color: #89B4FA;">Entrada2</span><span style="color: #94E2D5;">=</span><span>Valor2</span></span>
<span class="giallo-l"></span>
<span class="giallo-l"><span style="color: #9399B2;">[</span><span style="color: #F9E2AF;">Outro Grupo</span><span style="color: #9399B2;">]</span></span>
<span class="giallo-l"><span style="color: #89B4FA;">RodouUmaVez</span><span style="color: #94E2D5;">=</span><span>true</span></span>
<span class="giallo-l"><span style="color: #89B4FA;">cor</span><span style="color: #94E2D5;">=</span><span style="color: #9399B2;font-style: italic;">#ffffff</span></span></code></pre>
<p>Para gerenciar esses arquivos de configuração, a KDE usa a biblioteca KConfig. Ela precisa de quatro passos básicos:</p>
<ol>
<li>Criar um objeto que representa um arquivo de configuração</li>
<li>Criar um objeto que representa um grupo num arquivo de configuração</li>
<li>Ler/escrever para o objeto representando o grupo</li>
<li>Se tiver escrito algo no objeto representando o grupo, sincronizar as mudanças para o disco</li>
</ol>
<p>Se você souber um mínimo de C++, você vai entender rápido. Vamos falar só do passo 1, por enquanto.</p>
<p>Vamos dar uma olhada na assinatura da função do KConfig que nos interessa, um dos construtores:</p>
<pre class="giallo" style="color: #CDD6F4; background-color: #1E1E2E;"><code data-lang="cpp"><span class="giallo-l"><span style="color: #89B4FA;font-style: italic;">KConfig</span><span style="color: #9399B2;"> (</span><span style="color: #CBA6F7;">const</span><span> QString </span><span style="color: #94E2D5;">&amp;</span><span>file</span><span style="color: #94E2D5;">=</span><span style="color: #89B4FA;font-style: italic;">QString</span><span style="color: #9399B2;">(),</span><span> OpenFlags mode</span><span style="color: #94E2D5;">=</span><span>FullConfig</span><span style="color: #9399B2;">,</span><span style="color: #F9E2AF;"> QStandardPaths</span><span style="color: #9399B2;">::</span><span>StandardLocation type</span><span style="color: #94E2D5;">=</span><span style="color: #F9E2AF;">QStandardPaths</span><span style="color: #9399B2;">::</span><span>GenericConfigLocation</span><span style="color: #9399B2;">)</span></span></code></pre>
<p>O primeiro parâmetro é <code>file</code>, ou arquivo, bastante auto-explicativo, é o arquivo de configuração que queremos mexer.</p>
<p>O segundo parâmetro é <code>mode</code>, o modo como o arquivo de confiração será gerenciado. Na maioria das vezes, o modo vai ser <code>KConfig::SimpleConfig</code> (apenas um arquivo) ou <code>KConfig::FullConfig</code> (todos os arquivos de config relevantes). Se um código de verdade que você encontrar tiver algo diferente, não mude.</p>
<p>O terceiro parâmetro é o que mais nos interessa, <code>type</code>, ou tipo, isto é, que tipo de arquivo é e onde ele deve ser salvo. Por padrão é <code>QStandardPaths::GenericConfigLocation</code>, correspondendo a <code>~/.config/</code>.</p>
<p>Vamos checar um exemplo prático rapidamente.</p>
<pre class="giallo" style="color: #CDD6F4; background-color: #1E1E2E;"><code data-lang="cpp"><span class="giallo-l"><span style="color: #F9E2AF;font-style: italic;">KConfig</span><span style="color: #89B4FA;font-style: italic;"> configurationFile</span><span style="color: #9399B2;">(</span><span style="color: #A6E3A1;">&quot;myappconfigrc&quot;</span><span style="color: #9399B2;">,</span><span style="color: #F9E2AF;"> KConfig</span><span style="color: #9399B2;">::</span><span style="color: #F9E2AF;font-style: italic;">SimpleConfig</span><span style="color: #9399B2;">,</span><span style="color: #F9E2AF;"> QStandardPaths</span><span style="color: #9399B2;">::</span><span style="color: #F9E2AF;font-style: italic;">AppConfigLocation</span><span style="color: #9399B2;">);</span></span></code></pre>
<p>O arquivo é <code>myappconfigrc</code>.</p>
<p><code>SimpleConfig</code> foi escolhido aqui por razões didáticas.</p>
<p>A parte interessante é o <code>AppConfigLocation</code>. Ele corresponde a ~/.config/appname/.</p>
<p>Ao simplesmente mudar o padrão de <code>GenericConfigLocation</code>, isto é, ~/.config/, para <code>AppConfigLocation</code>, isto é, ~/.config/appname/, já terminamos a implementação.</p>
<p>Sim, você leu certo. É uma mudança de uma linha só.</p>
<p>Você talvez se depare com o KSharedConfig ao invés do KConfig. Sua assinatura de função relevante é:</p>
<pre class="giallo" style="color: #CDD6F4; background-color: #1E1E2E;"><code data-lang="cpp"><span class="giallo-l"><span style="color: #F9E2AF;font-style: italic;">KSharedConfigPtr</span><span style="color: #F9E2AF;"> KSharedConfig</span><span style="color: #9399B2;">::</span><span style="color: #89B4FA;font-style: italic;">openConfig</span><span style="color: #9399B2;"> (</span><span style="color: #CBA6F7;">const</span><span style="color: #F9E2AF;font-style: italic;"> QString</span><span style="color: #94E2D5;"> &amp;</span><span style="color: #EBA0AC;font-style: italic;">  fileName</span><span style="color: #94E2D5;"> =</span><span style="color: #89B4FA;font-style: italic;"> QString</span><span style="color: #9399B2;">(),</span><span style="color: #F9E2AF;font-style: italic;"> OpenFlags</span><span style="color: #EBA0AC;font-style: italic;">  mode</span><span style="color: #94E2D5;"> =</span><span> FullConfig</span><span style="color: #9399B2;">,</span><span style="color: #F9E2AF;"> QStandardPaths</span><span style="color: #9399B2;">::</span><span style="color: #F9E2AF;font-style: italic;">StandardLocation</span><span style="color: #EBA0AC;font-style: italic;">  type</span><span style="color: #94E2D5;"> =</span><span style="color: #F9E2AF;"> QStandardPaths</span><span style="color: #9399B2;">::</span><span style="color: #F9E2AF;font-style: italic;">GenericConfigLocation</span><span style="color: #9399B2;">)</span></span></code></pre>
<p><code>fileName</code>, aí <code>mode</code>, aí <code>type</code> com padrão em ~/.config/, mesma coisa que o KConfig.</p>
<p>Num código de verdade, você poderia ver algo similar a:</p>
<pre class="giallo" style="color: #CDD6F4; background-color: #1E1E2E;"><code data-lang="cpp"><span class="giallo-l"><span>KSharedConfigPtr configurationFile </span><span style="color: #94E2D5;">=</span><span style="color: #F9E2AF;"> KSharedConfig</span><span style="color: #9399B2;">::</span><span style="color: #89B4FA;font-style: italic;">openConfig</span><span style="color: #9399B2;">(</span><span style="color: #A6E3A1;">&quot;myappconfigrc&quot;</span><span style="color: #9399B2;">,</span><span style="color: #F9E2AF;"> KConfig</span><span style="color: #9399B2;">::</span><span>SimpleConfig</span><span style="color: #9399B2;">,</span><span style="color: #F9E2AF;"> QStandardPaths</span><span style="color: #9399B2;">::</span><span>AppConfigLocation</span><span style="color: #9399B2;">);</span></span></code></pre>
<p>Bem simples. É quase a mesma coisa, você simplesmente atribui o resultado de <code>openConfig()</code> a um simples ponteiro.</p>
<p>O KSharedConfig é preferível ao KConfig no geral, na verdade. Então você provavelmente vai encontrar o KSharedConfig mais comumente em código de verdade.</p>
<p>Alguns outros exemplos de código de verdade que você pode encontrar seriam similares a:</p>
<pre class="giallo" style="color: #CDD6F4; background-color: #1E1E2E;"><code data-lang="cpp"><span class="giallo-l"><span>KSharedConfigPtr configurationFile </span><span style="color: #94E2D5;">=</span><span style="color: #F9E2AF;"> KSharedConfig</span><span style="color: #9399B2;">::</span><span style="color: #89B4FA;font-style: italic;">openConfig</span><span style="color: #9399B2;">(</span><span style="color: #A6E3A1;">&quot;myappconfigrc&quot;</span><span style="color: #9399B2;">,</span><span style="color: #F9E2AF;"> KConfig</span><span style="color: #9399B2;">::</span><span>SimpleConfig</span><span style="color: #9399B2;">);</span></span>
<span class="giallo-l"><span>KSharedConfigPtr configurationFile </span><span style="color: #94E2D5;">=</span><span style="color: #F9E2AF;"> KSharedConfig</span><span style="color: #9399B2;">::</span><span style="color: #89B4FA;font-style: italic;">openConfig</span><span style="color: #9399B2;">(</span><span style="color: #A6E3A1;">&quot;myappconfigrc&quot;</span><span style="color: #9399B2;">);</span></span>
<span class="giallo-l"><span>KSharedConfigPtr configurationFile </span><span style="color: #94E2D5;">=</span><span style="color: #F9E2AF;"> KSharedConfig</span><span style="color: #9399B2;">::</span><span style="color: #89B4FA;font-style: italic;">openConfig</span><span style="color: #9399B2;">();</span></span></code></pre>
<p>No primeiro caso, o último parâmetro, <code>type</code>, não existe, então seu padrão (o que vem após o = na assinatura da função) é o <code>GenericConfigLocation</code>.</p>
<p>No segundo caso, o parâmetro <code>mode</code> está faltando também, então o padrão é <code>FullConfig</code> e <code>GenericConfigLocation</code>.</p>
<p>No terceiro caso não há nenhum parâmetro, nem mesmo <code>fileName</code>, então o padrão se torna <code>appname</code>, <code>FullConfig</code> e <code>GenericConfigLocation</code>. <code>appname</code>, no caso, é o nome do aplicativo como foi definido com QCoreApplication ou KAboutData.</p>
<p>Você agora está preparado para alterar o código da KDE e solicitar que seu aplicativo favorito comece a usar ~/.config/appdir/! Vai lá! \òwó/</p>
<p>Bem, pelo menos para aplicativos que usem ~/.config/appdir/. Usar nomes de pastas específicas fica para outro dia. Mas já faz diferença.</p>
<p>Só para satisfazer a curiosidade, vamos dar uma olhada nos passos 2, 3 e 4, usando como base o arquivo de configuração INI mencionado alguns parágrafos atrás, e usando o KSharedConfig ao invés do KConfig. Só para relembrar, o arquivo INI é assim:</p>
<pre class="giallo" style="color: #CDD6F4; background-color: #1E1E2E;"><code data-lang="ini"><span class="giallo-l"><span style="color: #9399B2;">[</span><span style="color: #F9E2AF;">Nome do Grupo</span><span style="color: #9399B2;">]</span></span>
<span class="giallo-l"><span style="color: #89B4FA;">Entrada1</span><span style="color: #94E2D5;">=</span><span>Valor1</span></span>
<span class="giallo-l"><span style="color: #89B4FA;">Entrada2</span><span style="color: #94E2D5;">=</span><span>Valor2</span></span>
<span class="giallo-l"></span>
<span class="giallo-l"><span style="color: #9399B2;">[</span><span style="color: #F9E2AF;">Outro Grupo</span><span style="color: #9399B2;">]</span></span>
<span class="giallo-l"><span style="color: #89B4FA;">RodouUmaVez</span><span style="color: #94E2D5;">=</span><span>true</span></span>
<span class="giallo-l"><span style="color: #89B4FA;">cor</span><span style="color: #94E2D5;">=</span><span style="color: #9399B2;font-style: italic;">#ffffff</span></span></code></pre>
<p>Começamos com o passo 2:</p>
<pre class="giallo" style="color: #CDD6F4; background-color: #1E1E2E;"><code data-lang="cpp"><span class="giallo-l"><span>KConfigGroup configurationGroup </span><span style="color: #94E2D5;">=</span><span> configurationFile</span><span style="color: #9399B2;">-&gt;</span><span style="color: #89B4FA;font-style: italic;">group</span><span style="color: #9399B2;">(</span><span style="color: #A6E3A1;">&quot;Outro Grupo&quot;</span><span style="color: #9399B2;">);</span></span></code></pre>
<p>Literalmente não poderia ser mais simples. Você captura um grupo chamado "Outro Grupo" do arquivo de configuração e atribui ele a um objeto KConfigGroup.</p>
<pre class="giallo" style="color: #CDD6F4; background-color: #1E1E2E;"><code data-lang="cpp"><span class="giallo-l"><span>QString cor </span><span style="color: #94E2D5;">=</span><span> configurationGroup</span><span style="color: #9399B2;">.</span><span style="color: #89B4FA;font-style: italic;">readEntry</span><span style="color: #9399B2;">(</span><span style="color: #A6E3A1;">&quot;cor&quot;</span><span style="color: #9399B2;">,</span><span style="color: #89B4FA;font-style: italic;"> QString</span><span style="color: #9399B2;">());</span></span></code></pre>
<p>Então lemos uma entrada que fica dentro do grupo "Outro Grupo", neste caso "cor". Se ele estivesse vazio, ele retornaria apenas um QString(), uma string vazia; daria para usar QColor no lugar de QString também se quisesse.</p>
<p>De todo modo, a entrada não está vazia, então o código retorna "#ffffff".</p>
<pre class="giallo" style="color: #CDD6F4; background-color: #1E1E2E;"><code data-lang="cpp"><span class="giallo-l"><span>configurationGroup</span><span style="color: #9399B2;">.</span><span style="color: #89B4FA;font-style: italic;">writeEntry</span><span style="color: #9399B2;">(</span><span style="color: #A6E3A1;">&quot;RodouUmaVez&quot;</span><span style="color: #9399B2;">,</span><span style="color: #FAB387;"> false</span><span style="color: #9399B2;">);</span></span></code></pre>
<p>Bem simples: escrevemos o valor <code>false</code> na entrada "RodouUmaVez". Embora tenhamos escrito para o <em>objeto</em> de configuração, ainda precisamos escrever para o <em>arquivo</em> de configuração, então nos falta o último passo:</p>
<pre class="giallo" style="color: #CDD6F4; background-color: #1E1E2E;"><code data-lang="cpp"><span class="giallo-l"><span>configurationGroup</span><span style="color: #9399B2;">.</span><span style="color: #89B4FA;font-style: italic;">sync</span><span style="color: #9399B2;">();</span></span></code></pre>
<p>E pá, salvo.</p>
<p>Outra possível ocorrência que você pode encontrar em código real pode ser:</p>
<pre class="giallo" style="color: #CDD6F4; background-color: #1E1E2E;"><code data-lang="cpp"><span class="giallo-l"><span>KSharedConfig</span><span style="color: #9399B2;">::</span><span style="color: #89B4FA;font-style: italic;">openConfig</span><span style="color: #9399B2;">()-&gt;</span><span style="color: #89B4FA;font-style: italic;">sync</span><span style="color: #9399B2;">();</span></span></code></pre>
<p>Que faz literalmente a mesma coisa.</p>
<p>E é isso. Você agora sabe o básico de como gerenciar arquivos de configuração com o KConfig. Bem simples, não? Eu adoro o quão fácil ele é de usar, só precisava de mais documentação, que está sendo feita.</p>
<h2 id="os-recursos">Os recursos<a class="zola-anchor" href="#os-recursos" aria-label="Anchor link for: os-recursos">🔗</a></h2>
<p>Ficou interessado e quer ver mais sobre? Estou trabalhando com a <a rel="external" target="_blank" href="https://api.kde.org/kconfig.html">documentação da API do KConfig</a> para deixar bastante fácil de ler e usar, fique no aguarde. Você pode clicar em Class List ou Alphabetical List para ver as classes e funções disponíveis.</p>
<p>Enquanto as melhorias não saem, a <a rel="external" target="_blank" href="https://develop.kde.org/docs/features/configuration/introduction/">Introdução ao KConfig</a> serve bem. É em inglês. Ela menciona mais ou menos o mesmo do que eu disse aqui.</p>
<p>Também vale a pena dar uma olhada na documentação de API do <a rel="external" target="_blank" href="https://doc.qt.io/qt-6/qsettings.html">QSettings</a> e do <a rel="external" target="_blank" href="https://doc.qt.io/qt-6/qstandardpaths.html">QStandardPaths</a>.</p>
<p>Eu nem cheguei a falar sobre o <a rel="external" target="_blank" href="https://develop.kde.org/docs/features/configuration/kconfig_xt/">KConfigXT</a> porque, bem, ainda não estudei ele a fundo. Você só precisa saber que para ver mais você vai precisar procurar por arquivos .kcfg e .kcfgc. Não sou tão fã do uso de XML, mas o negócio tem de fato uma <a rel="external" target="_blank" href="https://develop.kde.org/docs/features/configuration/kconfig_xt/#reading-and-setting-values">API super conveniente</a>.</p>]]></content></entry></feed>