<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Микроблог про wxWidgets</title>
	<atom:link href="https://begemotov.net/wxwidgets/feed/" rel="self" type="application/rss+xml" />
	<link>https://begemotov.net/wxwidgets</link>
	<description>Мысли в процессе использования: открытия, удивления, мысли, ссылки, решения, советы, куски кода...</description>
	<lastBuildDate>Tue, 08 Nov 2011 20:02:21 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.5.5</generator>
	<item>
		<title>Обработка событий в wxWidgets.</title>
		<link>https://begemotov.net/wxwidgets/tutorials/obrabotka-sobytij-v-wxwidgets/</link>
					<comments>https://begemotov.net/wxwidgets/tutorials/obrabotka-sobytij-v-wxwidgets/#comments</comments>
		
		<dc:creator><![CDATA[Begemot]]></dc:creator>
		<pubDate>Tue, 08 Nov 2011 19:58:57 +0000</pubDate>
				<category><![CDATA[Учебники]]></category>
		<category><![CDATA[book]]></category>
		<guid isPermaLink="false">http://begemotov.net/wxwidgets/tutorials/%d0%be%d0%b1%d1%80%d0%b0%d0%b1%d0%be%d1%82%d0%ba%d0%b0-%d1%81%d0%be%d0%b1%d1%8b%d1%82%d0%b8%d0%b9-%d0%b2-wxwidgets/</guid>

					<description><![CDATA[Процесс перевод книги продолжается. Дополнение H: Обработка событий в wxWidgets. Сейчас мы попробуем подробно осветить вопрос обработки событий в wxWidgets , включая все детали, опушенные когда мы об этом говорили в прошлый раз.Когда приходит событие от оконной системы, wxWidgets вызывает функцию wxEvtHandler::ProcessEvent принадлежащую первому объекту окна с генерировавшего событие.&#160;&#160; Рисунок H-1 демонстрирует порядок поиска в [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>Процесс перевод книги продолжается.</p>
<p><span id="more-532"></span></p>
<p>Дополнение H: Обработка событий в wxWidgets.</p>
<p>Сейчас мы попробуем подробно осветить вопрос обработки событий в wxWidgets , включая все детали, опушенные когда мы об этом говорили в прошлый раз.<br />Когда приходит событие от оконной системы, wxWidgets вызывает функцию wxEvtHandler::ProcessEvent принадлежащую первому объекту окна с генерировавшего событие.<br />&nbsp;&nbsp; <br />Рисунок H-1 демонстрирует порядок поиска в таблице, так как его выполняет ProcessEvent. Все это работает следующим образом:</p>
<p>1. Если объект находится в заблокированном состоянии (после вызова wxEvtHandler::SetEvtHandlerEnabled), функция сразу переходит к шагу №6.&nbsp; </p>
<p>2. Если объект является окном (наследник класса wxWindow) ProcessEvent рекурсивно вызывает все валидаторы установленные для этого окна. В случае успеха, функция завершается.&nbsp;&nbsp;&nbsp;&nbsp; </p>
<p>3. Иначе вызывается SearchEventTable для обработчика данного события. Если поиск не увенчался успехом, то поиск продолжается в таблице для базового класса, далее следующего базового класса, и так далее по все иерархии до тех пор пока соответствующий обработчик не будет найден или не закончится иерархия, в первом случае функция прекращает работу. </p>
<p>4. Поиск проходит вниз по всей цепочке обработчиков событий (обычно в ней всего один элемент). Функция завершается в случае, если найден подходящий обработчик.</p>
<p>5. Если объект наследник wxWidnow и событие должно быть распространено (обычно распространяются только события типа wxCommandEvent), ProcessEvent рекурсивно вызывает обработчики родительских окон. В случае возврата true, функция прекращает работу.</p>
<p>6. И наконец, вызывается ProcessEvent объекта приложения. <br />&nbsp;<br />Рисунок H-1. Поток обработки события</p>
<p><a href="https://begemotov.net/wxwidgets/wp-content/uploads/2011/11/h-1.png"><img fetchpriority="high" decoding="async" style="border-bottom: 0px; border-left: 0px; border-top: 0px; border-right: 0px" border="0" alt="h-1" src="https://begemotov.net/wxwidgets/wp-content/uploads/2011/11/h-1_thumb.png" width="484" height="706"></a></p>
<p>&nbsp;</p>
<p>Обратите особое внимание на пятый шаг. Люди часто приходят в замешательство от этой мощной и гибкой возможности системы обработки событий в wxWidgets или просто игнорируют ее. Говоря другими словами, события с установленным флагом, разрешающим распространение (обычно это достигается путем прямого или косвенного наследования от wxCommandEvent) путешествуют вверх по иерархии окон, от дочернего к родительскому окну, до тех пор пока не будет достигнут максимальный уровень распространения или не найдется подходящий обработчик, который НЕ вызовет Skip().&nbsp;&nbsp;&nbsp; <br />&nbsp;</p>
<p>Когда командное событие распространяться в верх к родительскому окну, распространение прекращается по достижению родительского диалога, если он есть. Это гарантирует что вы не рискуете получить неожиданное событие от контролов вашего диалога (которые скорее всего будут оставлены диалогом не обработанными по сколько он ничего не знает о них) выше написанное справедливо для модального диалога. Однако, события свободно распространяются между фреймами. Причиной для такого выбора послужило то, что обычно приложение имеет всего несколько фреймов, и связи ребенок &#8211; родитель вполне осознаются программистом. В то время как в сложной программе, может быть весьма сложно или даже невозможно, отследить все используемые диалоги (помните что некоторые их них вполне могут создаваться самой библиотекой). Если вам по каким-либо причинам необходимо иное поведение, вы можете явно вызвать SetExtraStyle(wxWS_EX_ BLOCK_EVENTS), чтобы предотвратить распространение событий за пределы данного окна, или вы можете сбросить этот флаг для диалогов, где он установлен по умолчанию.</p>
<p>Основные события окна (изменения размера, движения, события отрисовки, мыши, клавиатуры и так далее) посылаются только окну. События, имеющие значения более высокого уровня или события генерируемые самим окном, к примеру, нажатия на кнопки, выбор меню, раскрытия ветви дерева и т.д. являются командами и отсылаются родительскому оку, на случай если оно заинтересованно в их специальной обработке.&nbsp; </p>
<p>Учтите, что вы вполне можете заместить стандартную функцию ProcessEvent для перенаправленния обработки сообщений. Это, к примеру, сделано для в части библиотеки отвечающей за реализацию архитектуры документ-представление, для того что бы позволить размещение обработчиков событий как в классе документа, так и в классе представления. Для определения, является ли событие командой (скорее всего вы хотите перенаправлять только командные события) в целях эффективности вы можете использовать wxEvent::IsCommandEvent вместо, использования достаточно медленной системы типов времени выполнения.&nbsp;&nbsp;&nbsp;&nbsp; </p>
]]></content:encoded>
					
					<wfw:commentRss>https://begemotov.net/wxwidgets/tutorials/obrabotka-sobytij-v-wxwidgets/feed/</wfw:commentRss>
			<slash:comments>4</slash:comments>
		
		
			</item>
		<item>
		<title>Просмотр wxWidgets переменых в GDB Ubuntu</title>
		<link>https://begemotov.net/wxwidgets/using/watch-wxwidgets-variable-in-gdb-ubuntu/</link>
		
		<dc:creator><![CDATA[Begemot]]></dc:creator>
		<pubDate>Fri, 28 Oct 2011 20:19:20 +0000</pubDate>
				<category><![CDATA[Использование]]></category>
		<category><![CDATA[gdb]]></category>
		<category><![CDATA[Ubuntu]]></category>
		<guid isPermaLink="false">http://begemotov.net/wxwidgets/using/%d0%bf%d1%80%d0%be%d1%81%d0%bc%d0%be%d1%82%d1%80-wxwidgets-%d0%bf%d0%b5%d1%80%d0%b5%d0%bc%d0%b5%d0%bd%d1%8b%d1%85-%d0%b2-gdb-ubuntu/</guid>

					<description><![CDATA[GDB к сожалению не самый удобный отладчик на свете, но что делать&#8230; А мой (7.2 под ubuntu 11.04) еще падал все-время, если в функции где я ставлю брейк, есть определение wxString, типа wxString str = &#8220;some string&#8221;; падал с таким сообщением Breakpoint 2, BegUtils::GetImageFromZipResource (pathURL=&#8230;, fileName=&#8230;, type=wxBITMAP_TYPE_PNG) at /media/data/work/Flashnote/src/Utility/begutils.cpp:166/media/data/work/Flashnote/src/Utility/begutils.cpp:166:4941:beg:0x82977e3&#62;&#62;&#62;&#62;&#62;&#62;cb_gdb:&#62; info localswarning: static field&#8217;s value depends [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>GDB к сожалению не самый удобный отладчик на свете, но что делать&#8230; А мой (7.2 под ubuntu 11.04) еще падал все-время, если в функции где я ставлю брейк, есть определение wxString, типа wxString str = &#8220;some string&#8221;; падал с таким сообщением</p>
<blockquote>
<p>Breakpoint 2, BegUtils::GetImageFromZipResource (pathURL=&#8230;, fileName=&#8230;, type=wxBITMAP_TYPE_PNG) at /media/data/work/Flashnote/src/Utility/begutils.cpp:166<br />/media/data/work/Flashnote/src/Utility/begutils.cpp:166:4941:beg:0x82977e3<br />&gt;&gt;&gt;&gt;&gt;&gt;cb_gdb:<br />&gt; info locals<br />warning: static field&#8217;s value depends on the current frame &#8211; bad debug info?<br />/build/buildd/gdb-7.2/gdb/findvar.c:427: internal-error: read_var_value: Assertion `frame&#8217; failed.<br />A problem internal to GDB has been detected,<br />further debugging may prove unreliable.</p>
</blockquote>
<p>Если определения строки нет, то заходил, но падал стоило провести курсором над параметром функции &#8211; строке. Вообщем дебажить было вообще невозможно.</p>
<p>Решение такое:</p>
<blockquote><p><font size="2"><font size="2"> </p>
<p dir="ltr" align="left">CodeBloks -&gt; Settings -&gt; Compiler and debugger settings -&gt; Debugger settings -&gt; И там в первый едит бокс добавляем строку source&nbsp; /media/data/const/wxWidgets/misc/gdb/print.py</p>
<p dir="ltr" align="left">
<p></font></font></p></blockquote>
<p dir="ltr" align="left">После чего падения прекращаются, и о чудо, отладчик начинает показывать значение wxString. Жизнь сразу становится много лучше:)</p>
<p>Еще почитать можно тут <a href="http://wxwidgets.blogspot.com/2009/01/pretty-printing-wxstuff-in-gdb.html" target="_blank">Pretty printing wxStuff in gdb</a> и <a href="http://forums.codeblocks.org/index.php/topic,12747.0.html" target="_blank">тут</a></p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Обработать завершение сессии в Linux</title>
		<link>https://begemotov.net/wxwidgets/common/obrabotat-zavershenie-sessii-v-linux/</link>
					<comments>https://begemotov.net/wxwidgets/common/obrabotat-zavershenie-sessii-v-linux/#comments</comments>
		
		<dc:creator><![CDATA[Begemot]]></dc:creator>
		<pubDate>Mon, 12 Sep 2011 15:07:42 +0000</pubDate>
				<category><![CDATA[Oбщее]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[грабли]]></category>
		<guid isPermaLink="false">http://begemotov.net/wxwidgets/common/obrabotat-zavershenie-sessii-v-linux/</guid>

					<description><![CDATA[Пытаюсь тут портировать на линукс свой менеджер заметок написанный на с++ and wxWidgets. Столкнулся с тем что не могу отследить событие когда пользователь уходит &#8211; logout, reboot, shut down. А мне то надо как-то данные сохранять. Под виндой, есть EVT_QUERY_END_SESSION, библиотека ловит виндовое сообщение и сообщает мне о событии, пускай с большими проблемами но что-то [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>Пытаюсь тут портировать <a href="http://softvoile.com/rus/flashnote/" target="_blank">на линукс свой менеджер заметок</a> написанный на с++ and wxWidgets. Столкнулся с тем что не могу отследить событие когда пользователь уходит &#8211; logout, reboot, shut down. А мне то надо как-то данные сохранять. Под виндой, есть EVT_QUERY_END_SESSION, библиотека ловит виндовое сообщение и сообщает мне о событии, пускай с большими проблемами но что-то сделать можно &#8211; сохранить данные, корректно закрыть приложение, заповним положение\размеры окна и мелкие настройки. Под макосом не пробовал, но говорят работает. Под Линуксом нет &#8211; в инете полно вопросов, жалоб &#8211; но решения нет.</p>
<p>Пытался использовать средства gtk (или posix, или чье это там), типа </p>
<blockquote><p><span style="widows: 2; text-transform: none; background-color: rgb(245,245,255); text-indent: 0px; letter-spacing: normal; font: 13px verdana, geneva, lucida, 'lucida grande', arial, helvetica, sans-serif; white-space: normal; orphans: 2; color: rgb(0,0,0); word-spacing: 0px; -webkit-text-decorations-in-effect: none; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px" class="Apple-style-span"></p>
<pre style="border-bottom: 1px inset; border-left: 1px inset; padding-bottom: 6px; overflow-x: auto; overflow-y: auto; background-color: rgb(225,228,242); margin: 0px; padding-left: 6px; padding-right: 6px; color: rgb(0,0,0); border-top: 1px inset; border-right: 1px inset; padding-top: 6px; background-origin: initial; background-clip: initial" class="alt2"><p>#include &lt;stdio.h&gt; // for File I/O
#include &lt;signal.h&gt; // for signals
#include &lt;unistd.h&gt; // for sleep()

void handler(int <font size="+0"><font style="background-color: #e1e4f2"><font color="red">sig</font>)
{
    </font></font><font style="background-color: #e1e4f2"><font color="red">    /* Just print to stderr and redirect 2&gt;&gt; test.txt in the shell */
    fprintf(stderr, "got %d\n", signal);

    signal(sig, handler); // let signal be caught again</font>
}

int main()
{
    signal(SIGTERM,handler);
    signal(SIGINT,handler);
    </font><font style="background-color: #e1e4f2" color="red">signal(SIGQUIT, handler); // Maybe we're getting QUIT first?
    signal(SIGHUP, handler); // If the terminal closes, we might get this
    signal(SIGPIPE, handler); // Don't know why we'd get this, but check anyway
    while(1) // loop forever with most signals trapped, impolitely waiting for a kill -9 ;)</font></p><p>    // run
}</p></pre>
<p></span></p></blockquote>
<p>Не фига, когда руками прибиваю приложение Ctrl+c в терминале или kill &#8230; срабатывает, когда вырубаю систему нет, сообщения не получаю. В инете все пишут тоже самое не работает.&nbsp; Code::Blocks тоже не сохраняет данные, если что-то изменить и сделать logout.&nbsp;&nbsp; </p>
<p>Получается линукс, или убунта, или гном не дает возможность приложению узнать что сессия завершается и корретно завершить работу, сохранив данные. Вот вам и Linux with a human face <img src="https://s.w.org/images/core/emoji/15.0.3/72x72/1f641.png" alt="🙁" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p>
<p>Есть правда какой-то EggSMClient в виде сорцов, LGPL, его например использует GEdit и молодец, корректно обрабатывает все. Но что-то про EggSMClient ни упоминаний толком, ни документации &#8211; особенно ничего не находится, а так разобратся без бутылки не получается. Печально все это <img src="https://s.w.org/images/core/emoji/15.0.3/72x72/1f641.png" alt="🙁" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p>
]]></content:encoded>
					
					<wfw:commentRss>https://begemotov.net/wxwidgets/common/obrabotat-zavershenie-sessii-v-linux/feed/</wfw:commentRss>
			<slash:comments>9</slash:comments>
		
		
			</item>
		<item>
		<title>Форматированный текст в контролах</title>
		<link>https://begemotov.net/wxwidgets/common/formatirovannyiy-tekst-v-kontrolah/</link>
					<comments>https://begemotov.net/wxwidgets/common/formatirovannyiy-tekst-v-kontrolah/#comments</comments>
		
		<dc:creator><![CDATA[Begemot]]></dc:creator>
		<pubDate>Mon, 07 Mar 2011 06:22:19 +0000</pubDate>
				<category><![CDATA[Oбщее]]></category>
		<category><![CDATA[+1]]></category>
		<guid isPermaLink="false">http://begemotov.net/wxwidgets/common/formatirovannyiy-tekst-v-kontrolah/</guid>

					<description><![CDATA[Ура, приятная новость:&#160; Markup in control labels. Меня эта возможность сильно порадовала в Qt когда я на нее перешел, теперь вот и в wxWidgets появляется что-то подобное, хотя конечно гораздо слабее чем в Qt, но все равно здорово. Правда не совсем понятно почему wxStaticText отстает от кнопки, но надеюсь сделают все хорошо в итоге:)]]></description>
										<content:encoded><![CDATA[<p>Ура, приятная новость:&nbsp; <a href="http://wxwidgets.blogspot.com/2011/02/markup-in-control-labels.html" target="_blank">Markup in control labels</a>. Меня эта возможность сильно порадовала в Qt когда я на нее перешел, теперь вот и в wxWidgets появляется что-то подобное, хотя конечно гораздо слабее чем в Qt, но все равно здорово. Правда не совсем понятно почему wxStaticText отстает от кнопки, но надеюсь сделают все хорошо в итоге:)</p>
]]></content:encoded>
					
					<wfw:commentRss>https://begemotov.net/wxwidgets/common/formatirovannyiy-tekst-v-kontrolah/feed/</wfw:commentRss>
			<slash:comments>2</slash:comments>
		
		
			</item>
		<item>
		<title>Qt vs wxWidgets личный опыт</title>
		<link>https://begemotov.net/wxwidgets/common/qt-vs-wxwidgets-lichnyiy-opyit/</link>
					<comments>https://begemotov.net/wxwidgets/common/qt-vs-wxwidgets-lichnyiy-opyit/#comments</comments>
		
		<dc:creator><![CDATA[Begemot]]></dc:creator>
		<pubDate>Mon, 28 Feb 2011 06:56:30 +0000</pubDate>
				<category><![CDATA[Oбщее]]></category>
		<category><![CDATA[Qt]]></category>
		<guid isPermaLink="false">http://begemotov.net/wxwidgets/common/qt-vs-wxwidgets-lichnyiy-opyit/</guid>

					<description><![CDATA[Меня тут спросили, спросили &#8211; отвечаю. В кратце про Qt vs wxWidgets после некоторого опыта, очень в кратце. &#160; Про Qt: 1. На Qt писать быстрее и проще (субьективно и смотря что) 2. Написанное под виндо в течении 3 месяцев запускается на макоси после часа работы. 3. Приложения не родные 4. Приложения здоровые. &#160; Про [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>Меня <a href="https://begemotov.net/wxwidgets/qt/o-pravilnyih-konteynerah-metodah-i-algoritmah/#comments" target="_blank">тут спросили</a>, спросили &#8211; отвечаю. В кратце про Qt vs wxWidgets после некоторого опыта, очень в кратце.</p>
<p><strong></strong>&nbsp;</p>
<p><strong>Про Qt:</strong></p>
<p>1. На Qt писать быстрее и проще (субьективно и смотря что)</p>
<p>2. Написанное под виндо в течении 3 месяцев запускается на макоси после часа работы.</p>
<p>3. Приложения не родные</p>
<p>4. Приложения здоровые.</p>
<p>&nbsp;</p>
<p><strong>Про wxWidgets:</strong></p>
<p>1. Писать вполне нормально, хотя может и не так гладко как на Qt</p>
<p>2. Результат выглядит роднее</p>
<p>3. Бинарников по паре сотен килобайт не получается, но и не десятки метров как у Qt.</p>
<p>4. Запуск под макосом &#8211; требует гораздо большего количества нервов, времени и напильников.</p>
<p>&nbsp;</p>
<p>Для <a href="http://www.breedingmaster.com/" target="_blank">этой программы</a> я после 10 дней на вх, выбрал Qt (совсем его тогда не зная), и не пожалел. Для своих <a href="http://clipdiary.com/" target="_blank">Clipdiary</a> и <a href="http://softvoile.com/flashnote/" target="_blank">Flashnote</a> я все таки считаю что wx не плох, хотя следует признать что первая программа уже продается под МакОС, а вторая и третья только в далекой перспективе:)</p>
<p>В общем &#8211; как всегда для конкретной задачи, нужен конкретный инструмент. </p>
<p>А еще, учитывая последний маневр Нокии, есть вероятность что развитие Qt тормознется, об этом стоит тоже думать&#8230;.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://begemotov.net/wxwidgets/common/qt-vs-wxwidgets-lichnyiy-opyit/feed/</wfw:commentRss>
			<slash:comments>20</slash:comments>
		
		
			</item>
		<item>
		<title>О правильных контейнерах, методах и алгоритмах</title>
		<link>https://begemotov.net/wxwidgets/qt/o-pravilnyih-konteynerah-metodah-i-algoritmah/</link>
					<comments>https://begemotov.net/wxwidgets/qt/o-pravilnyih-konteynerah-metodah-i-algoritmah/#comments</comments>
		
		<dc:creator><![CDATA[Begemot]]></dc:creator>
		<pubDate>Thu, 27 Jan 2011 17:04:57 +0000</pubDate>
				<category><![CDATA[Qt]]></category>
		<guid isPermaLink="false">http://begemotov.net/wxwidgets/qt/o-pravilnyih-konteynerah-metodah-i-algoritmah/</guid>

					<description><![CDATA[Довелось мне тут недавно портировать один код, считающий dog inbreeding coefficient, с C# на С++/Qt. Код портировался легко, фактически 1 в 1, за исключением того что стеки в Qt ведут себя немного не так как в шарпе, но это решилось. Через некоторое время обнаружилось, что на больших родословных код работает непозволительно медленно, в шарповской версии, [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>Довелось мне тут недавно портировать один код, считающий <a href="http://breedingmaster.com/">dog inbreeding coefficient</a>, с C# на С++/Qt. Код портировался легко, фактически 1 в 1, за исключением того что стеки в Qt ведут себя немного не так как в шарпе, но это решилось. Через некоторое время обнаружилось, что на больших родословных код работает непозволительно медленно, в шарповской версии, что интересно, проблем не было, пришлось оптимизировать.</p>
<p><strong>Шаг первый – правильные контейнеры.</strong></p>
<p>Код использовал списки, при портировании я их и заменил на QList. Но в принципе списки не самый быстрый контейнер для простых операций. Первое что я сделал заменил на QVector. Автозаменой, получил прирост в 30%. </p>
<p><strong>Шаг второй – правильные методы доступа.</strong></p>
<p>В поисках что бы еще улучшить, случайно наткнулся в документации на следующее</p>
<p> <span style="widows: 2; text-transform: none; text-indent: 0px; border-collapse: separate; font: medium arial; white-space: normal; orphans: 2; letter-spacing: normal; color: rgb(0,0,0); word-spacing: 0px; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; -webkit-text-decorations-in-effect: none; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px" class="Apple-style-span"><span style="line-height: 15px; font-family: verdana; color: rgb(54,53,52); font-size: 13px" class="Apple-style-span">     </p>
<p style="padding-bottom: 5px; line-height: 20px; margin: 0px; padding-left: 5px; padding-right: 5px; padding-top: 5px">For read-only access, an alternative syntax is to use<span class="Apple-converted-space">&#160;</span>at():</p>
<p style="padding-bottom: 5px; line-height: 20px; margin: 0px; padding-left: 5px; padding-right: 5px; padding-top: 5px">at() can be faster than operator[](), because it never causes a<span class="Apple-converted-space">&#160;</span>deep copy<span class="Apple-converted-space">&#160;</span>to occur.</p>
<p>У нас в контейнере хранились просто int’ы, ничего более сложного, поэтому чудес я не ожидал. Но произошло чудо:)</p>
<p>Замена всего одной строчки в коде вида</p>
<blockquote><p><font size="2">         </p>
<p>         <font color="#010001" size="2"><font color="#010001" size="2">Q_FOREACH</font></font><font color="#0000ff" size="2"><font color="#0000ff" size="2">(</font></font><font color="#010001" size="2"><font color="#010001" size="2">QList</font></font><font color="#0000ff" size="2"><font color="#0000ff" size="2">&lt;int&gt;</font></font><font size="2"> </font><font color="#010001" size="2"><font color="#010001" size="2">pf</font></font><font color="#0000ff" size="2"><font color="#0000ff" size="2">,</font></font><font size="2"> </font><font color="#010001" size="2"><font color="#010001" size="2">paths_father</font></font><font color="#0000ff" size="2"><font color="#0000ff" size="2">)</font></font></font><font size="2">          </p>
<p>         <font color="#0000ff" size="2"><font color="#0000ff" size="2">{</font></font></font><font size="2">          </p>
<p>         <font color="#010001" size="2"><font color="#010001" size="2">Q_FOREACH</font></font><font color="#0000ff" size="2"><font color="#0000ff" size="2">(</font></font><font color="#010001" size="2"><font color="#010001" size="2">QList</font></font><font color="#0000ff" size="2"><font color="#0000ff" size="2">&lt;int&gt;</font></font><font size="2"> </font><font color="#010001" size="2"><font color="#010001" size="2">pm</font></font><font color="#0000ff" size="2"><font color="#0000ff" size="2">,</font></font><font size="2"> </font><font color="#010001" size="2"><font color="#010001" size="2">paths_mother</font></font><font color="#0000ff" size="2"><font color="#0000ff" size="2">)</font></font></font><font size="2">          </p>
<p>         <font color="#0000ff" size="2"><font color="#0000ff" size="2">{</font></font></font><font size="2">          </p>
<p>         <font color="#0000ff" size="2"><font color="#0000ff" size="2">if</font></font><font size="2"> </font><font color="#0000ff" size="2"><font color="#0000ff" size="2">(</font></font><font color="#010001" size="2"><font color="#010001" size="2">pf</font></font><font color="#0000ff" size="2"><font color="#0000ff" size="2">[</font></font><font color="#800000" size="2"><font color="#800000" size="2">0</font></font><font color="#0000ff" size="2"><font color="#0000ff" size="2">]</font></font><font size="2"> </font><font color="#0000ff" size="2"><font color="#0000ff" size="2">!=</font></font><font size="2"> </font><font color="#010001" size="2"><font color="#010001" size="2">pm</font></font><font color="#0000ff" size="2"><font color="#0000ff" size="2">[</font></font><font color="#800000" size="2"><font color="#800000" size="2">0</font></font><font color="#0000ff" size="2"><font color="#0000ff" size="2">])</font></font><font size="2"> </font><font color="#0000ff" size="2"><font color="#0000ff" size="2">continue;</font></font></font><font size="2"></font></p></blockquote>
<p>   </span></span><span style="widows: 2; text-transform: none; text-indent: 0px; border-collapse: separate; font: medium arial; white-space: normal; orphans: 2; letter-spacing: normal; color: rgb(0,0,0); word-spacing: 0px; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; -webkit-text-decorations-in-effect: none; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px" class="Apple-style-span"><span style="line-height: 15px; font-family: verdana; color: rgb(54,53,52); font-size: 13px" class="Apple-style-span"><font size="2">       </p>
<p>Дала прирост на порядок для количества путей родителей XXK на XK, и в сотню раз (!) для количества порядка 220K на 30К. Сказка.</p>
<p><strong>И наконец, финальный аккорд – алгоритмы.</strong></p>
<p>К сожалению, таким образом удалось улучшить только второе проблемное место. А построение путей по прежнему было медленным. Пришлось найти другой алгоритм и все переписать. Стало почти мгновенно, особенно после добавления кэширования:) Как бонус считать стало более точно, так как оригинальный алгоритм игнорировал один параметр.</p>
<p>В общем, правильные вещи – рулят.</p>
<p>     </font></span></span></p>
]]></content:encoded>
					
					<wfw:commentRss>https://begemotov.net/wxwidgets/qt/o-pravilnyih-konteynerah-metodah-i-algoritmah/feed/</wfw:commentRss>
			<slash:comments>18</slash:comments>
		
		
			</item>
		<item>
		<title>Еще про локализацию</title>
		<link>https://begemotov.net/wxwidgets/common/esche-pro-lokalizatsiyu/</link>
					<comments>https://begemotov.net/wxwidgets/common/esche-pro-lokalizatsiyu/#comments</comments>
		
		<dc:creator><![CDATA[Begemot]]></dc:creator>
		<pubDate>Thu, 06 Jan 2011 04:27:37 +0000</pubDate>
				<category><![CDATA[Oбщее]]></category>
		<category><![CDATA[+1]]></category>
		<guid isPermaLink="false">http://begemotov.net/wxwidgets/common/esche-pro-lokalizatsiyu/</guid>

					<description><![CDATA[Сделали мне тут арабскую локализацию для двух программ. Понравилось как красиво wxWidgets все это обработала. Или это Винда? Ориганалы можно посмотреть тут и тут. Правда прикольно?:)]]></description>
										<content:encoded><![CDATA[<p>Сделали мне тут арабскую локализацию для двух программ. Понравилось как красиво wxWidgets все это обработала. Или это Винда?</p>
<p><a href="https://begemotov.net/wxwidgets/wp-content/uploads/2011/01/Flashnotear.png"><img decoding="async" style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="Flashnote-ar" border="0" alt="Flashnote-ar" src="https://begemotov.net/wxwidgets/wp-content/uploads/2011/01/Flashnotear_thumb.png" width="484" height="380" /></a> </p>
<p><a href="https://begemotov.net/wxwidgets/wp-content/uploads/2011/01/Flashnoteoptionsar.png"><img decoding="async" style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="Flashnote-options-ar" border="0" alt="Flashnote-options-ar" src="https://begemotov.net/wxwidgets/wp-content/uploads/2011/01/Flashnoteoptionsar_thumb.png" width="484" height="376" /></a> </p>
<p><a href="https://begemotov.net/wxwidgets/wp-content/uploads/2011/01/clipdiaryar.png"><img loading="lazy" decoding="async" style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="clipdiary-ar" border="0" alt="clipdiary-ar" src="https://begemotov.net/wxwidgets/wp-content/uploads/2011/01/clipdiaryar_thumb.png" width="484" height="729" /></a> </p>
<p>Ориганалы можно посмотреть <a href="http://clipdiary.com/screenshots.php">тут</a> и <a href="http://softvoile.com/flashnote/screenshots.php">тут</a>.</p>
<p>Правда прикольно?:)</p>
]]></content:encoded>
					
					<wfw:commentRss>https://begemotov.net/wxwidgets/common/esche-pro-lokalizatsiyu/feed/</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		
			</item>
	</channel>
</rss>
