<?xml version="1.0"?>
<?xml-stylesheet type="text/css" href="http://wiki.linuxformat.ru/wiki/skins/common/feed.css?303"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
		<id>http://wiki.linuxformat.ru/wiki/index.php?action=history&amp;feed=atom&amp;title=LXF105%3AQt4</id>
		<title>LXF105:Qt4 - История изменений</title>
		<link rel="self" type="application/atom+xml" href="http://wiki.linuxformat.ru/wiki/index.php?action=history&amp;feed=atom&amp;title=LXF105%3AQt4"/>
		<link rel="alternate" type="text/html" href="http://wiki.linuxformat.ru/wiki/index.php?title=LXF105:Qt4&amp;action=history"/>
		<updated>2026-05-13T04:54:53Z</updated>
		<subtitle>История изменений этой страницы в вики</subtitle>
		<generator>MediaWiki 1.19.20+dfsg-0+deb7u3</generator>

	<entry>
		<id>http://wiki.linuxformat.ru/wiki/index.php?title=LXF105:Qt4&amp;diff=8493&amp;oldid=prev</id>
		<title>Yaleks в 17:26, 22 августа 2009</title>
		<link rel="alternate" type="text/html" href="http://wiki.linuxformat.ru/wiki/index.php?title=LXF105:Qt4&amp;diff=8493&amp;oldid=prev"/>
				<updated>2009-08-22T17:26:40Z</updated>
		
		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table class='diff diff-contentalign-left'&gt;
				&lt;col class='diff-marker' /&gt;
				&lt;col class='diff-content' /&gt;
				&lt;col class='diff-marker' /&gt;
				&lt;col class='diff-content' /&gt;
			&lt;tr valign='top'&gt;
			&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;← Предыдущая&lt;/td&gt;
			&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;Версия 17:26, 22 августа 2009&lt;/td&gt;
			&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Строка 68:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Строка 68:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;связываем объект '''QGraphicsScene''' с объектом '''QGraphicsView'''.&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;связываем объект '''QGraphicsScene''' с объектом '''QGraphicsView'''.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&amp;lt;source lang=&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;c&lt;/del&gt;&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&amp;lt;source lang=&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;cpp-qt&lt;/ins&gt;&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&amp;#160;&amp;#160; QGraphicsScene * scene = new QGraphicsScene;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&amp;#160;&amp;#160; QGraphicsScene * scene = new QGraphicsScene;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&amp;#160;&amp;#160; graphicsView-&amp;gt;setScene(scene);&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&amp;#160;&amp;#160; graphicsView-&amp;gt;setScene(scene);&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Строка 128:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Строка 128:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Для реализации игры нам понадобится создать потомка класса '''QGraphicsScene''':&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Для реализации игры нам понадобится создать потомка класса '''QGraphicsScene''':&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&amp;lt;source lang=&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;c&lt;/del&gt;&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&amp;lt;source lang=&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;cpp-qt&lt;/ins&gt;&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&amp;#160; class MvScene : public QGraphicsScene&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&amp;#160; class MvScene : public QGraphicsScene&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&amp;#160; {&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&amp;#160; {&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Строка 157:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Строка 157:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;заполненные рисунком текстуры стены.&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;заполненные рисунком текстуры стены.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&amp;lt;source lang=&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;c&lt;/del&gt;&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&amp;lt;source lang=&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;cpp-qt&lt;/ins&gt;&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&amp;#160; void MvScene::makeWalls()&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&amp;#160; void MvScene::makeWalls()&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&amp;#160; {&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&amp;#160; {&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Строка 197:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Строка 197:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Изображение грузчика добавляется в графическую сцену с помощью метода '''addPixmap()''':&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Изображение грузчика добавляется в графическую сцену с помощью метода '''addPixmap()''':&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&amp;lt;source lang=&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;c&lt;/del&gt;&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&amp;lt;source lang=&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;cpp-qt&lt;/ins&gt;&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&amp;#160; worker = addPixmap(QPixmap(“Worker.gif”));&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&amp;#160; worker = addPixmap(QPixmap(“Worker.gif”));&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&amp;lt;/source&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&amp;lt;/source&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Строка 203:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Строка 203:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Рассмотрим теперь метод '''keyPressEvent()''', который является движущей силой всей нашей игры:&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Рассмотрим теперь метод '''keyPressEvent()''', который является движущей силой всей нашей игры:&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&amp;lt;source lang=&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;c&lt;/del&gt;&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&amp;lt;source lang=&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;cpp-qt&lt;/ins&gt;&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&amp;#160; void MvScene::keyPressEvent(QKeyEvent * keyEvent)&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&amp;#160; void MvScene::keyPressEvent(QKeyEvent * keyEvent)&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&amp;#160; {&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&amp;#160; {&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Строка 278:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Строка 278:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Обнаружение столкновений в нашей игре выполняет вспомогательная функция '''itemCollidesWith()''':&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Обнаружение столкновений в нашей игре выполняет вспомогательная функция '''itemCollidesWith()''':&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&amp;lt;source lang=&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;c&lt;/del&gt;&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&amp;lt;source lang=&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;cpp-qt&lt;/ins&gt;&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&amp;#160; QGraphicsItem * MvScene::itemCollidesWith(QGraphicsItem * item)&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&amp;#160; QGraphicsItem * MvScene::itemCollidesWith(QGraphicsItem * item)&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&amp;#160; {&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&amp;#160; {&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Строка 344:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Строка 344:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Рассмотрим фрагмент конструктора объекта-сцены программы ''crasyiface'':&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Рассмотрим фрагмент конструктора объекта-сцены программы ''crasyiface'':&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&amp;lt;source lang=&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;c&lt;/del&gt;&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&amp;lt;source lang=&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;cpp-qt&lt;/ins&gt;&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&amp;#160;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160;  QPushButton * button = new QPushButton(trUtf8(“Кнопочка”), 0);&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&amp;#160;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160;  QPushButton * button = new QPushButton(trUtf8(“Кнопочка”), 0);&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&amp;#160;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160;  QGraphicsProxyWidget * item = addWidget(button);&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&amp;#160;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160;  QGraphicsProxyWidget * item = addWidget(button);&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Yaleks</name></author>	</entry>

	<entry>
		<id>http://wiki.linuxformat.ru/wiki/index.php?title=LXF105:Qt4&amp;diff=7612&amp;oldid=prev</id>
		<title>Crazy Rebel: викификация, оформление, иллюстрация</title>
		<link rel="alternate" type="text/html" href="http://wiki.linuxformat.ru/wiki/index.php?title=LXF105:Qt4&amp;diff=7612&amp;oldid=prev"/>
				<updated>2009-04-15T07:30:01Z</updated>
		
		<summary type="html">&lt;p&gt;викификация, оформление, иллюстрация&lt;/p&gt;
&lt;a href=&quot;http://wiki.linuxformat.ru/wiki/index.php?title=LXF105:Qt4&amp;amp;diff=7612&amp;amp;oldid=7609&quot;&gt;Внесённые изменения&lt;/a&gt;</summary>
		<author><name>Crazy Rebel</name></author>	</entry>

	<entry>
		<id>http://wiki.linuxformat.ru/wiki/index.php?title=LXF105:Qt4&amp;diff=7609&amp;oldid=prev</id>
		<title>Crazy Rebel: викификация, оформление, иллюстрация</title>
		<link rel="alternate" type="text/html" href="http://wiki.linuxformat.ru/wiki/index.php?title=LXF105:Qt4&amp;diff=7609&amp;oldid=prev"/>
				<updated>2009-04-15T06:13:23Z</updated>
		
		<summary type="html">&lt;p&gt;викификация, оформление, иллюстрация&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Новая страница&lt;/b&gt;&lt;/p&gt;&lt;div&gt;[[Категория:Учебники]] &lt;br /&gt;
: '''Программирование в стиле ''Qt''''' Осваиваем технологии, лежащие в основе нашумевшего KDE4&lt;br /&gt;
&lt;br /&gt;
==Новый взгляд на старую графику==&lt;br /&gt;
&lt;br /&gt;
{{Цикл/Qt4}}&lt;br /&gt;
&lt;br /&gt;
: '''ЧАСТЬ 4''' Представьте себе ''Сокобан'', а потом – замените ящики на кнопки и поля ввода. Ничего себе дизайнер интерфейсов? Со средой ''Graphics View''  возможно и не такое, утверждает '''Андрей Боровский'''.&lt;br /&gt;
&lt;br /&gt;
:::: ''– А что у них за игра? Шахматы? Или какой-нибудь «стартрек»?''&lt;br /&gt;
:::: ''– Нет, здесь игра для профессионалов... Садишься за штурвал воображаемого космолета и определяешь гравитацию незнакомой тебе планеты. Ее автомат подбирает случайным образом.''&lt;br /&gt;
:::::::::''М. Пухов, Путь к Земле («Кон-Тики»).''&lt;br /&gt;
&lt;br /&gt;
Среда ''Graphics View Framework'', появившаяся в ''Qt'' начиная с версии 4.2, пришла на смену графической системе, основанной на классе '''QCanvas'''. ''Graphics View Framework'' – это не только система вывода графики с широкими возможностями, но и готовая реализация парадигмы «модель-вид-контроллер» (Model-View-Controller, MVC) для программ, работающих с 2D-изображениями.&lt;br /&gt;
Мы уже встречались с шаблоном MVC, когда изучали каркас ''Interview Framework'', предназначенный для работы с данными, хранящимися в форме таблиц. ''Graphics View Framework'' распространяет те же идеи на двумерную графику. Для объяснения преимуществ ''Interview Framework'' мы пользовались программой, работающей с базой данных. Возможности же ''Graphics View Framework'' проще всего продемонстрировать на примере компьютерной аркады.&lt;br /&gt;
&lt;br /&gt;
Предположим, вы решили написать двумерную видеоигру.&lt;br /&gt;
Применение подхода «модель-контроллер-вид» может существенно&lt;br /&gt;
упростить процесс создания такой программы. Описание игрового&lt;br /&gt;
мира представляет собой модель данных программы. Визуализацию&lt;br /&gt;
сцены выполняет объект отображения (вид). Контроллер транслирует действия пользователя в события модели. Система ''Graphics View Framework'' предоставляет вам заготовки для создания модели, контроллера и объекта отображения, изначально наделенные широкой&lt;br /&gt;
функциональностью. Кроме того, ''Graphics View Framework'' берет на&lt;br /&gt;
себя решение таких задач, как обнаружение столкновений (collision detection) и геометрические преобразования изображений.&lt;br /&gt;
&lt;br /&gt;
Разумеется, ''Graphics View Framework'' может найти применение не&lt;br /&gt;
только в играх, но и в любых программах, которым приходится отображать интерактивные графические модели, состоящие из большого числа элементов.&lt;br /&gt;
&lt;br /&gt;
{{Врезка|Содержание=[[Изображение:LXF105_90_1.jpg|Рис.1|300px]]|Ширина=300px}}&lt;br /&gt;
&lt;br /&gt;
Основу ''Graphics View Framework'' составляют три ''Qt''-класса, представленные на схеме (рис. 1).&lt;br /&gt;
&lt;br /&gt;
Модель данных реализована с помощью объекта класса&lt;br /&gt;
'''QGraphicsScene'''. Элементами модели данных являются графические&lt;br /&gt;
примитивы (геометрические фигуры и растровые изображения). Все&lt;br /&gt;
графические примитивы реализованы с помощью классов-потомков&lt;br /&gt;
класса '''QGraphicsItem'''. Таким образом, объект класса '''QGraphicsScene'''&lt;br /&gt;
можно рассматривать как контейнер для набора объектов классов-&lt;br /&gt;
потомков '''QGraphicsItem'''. Для отображения модели, созданной в&lt;br /&gt;
'''QGraphicsScene''', служит объект класса '''QGraphicsView'''. Работая в&lt;br /&gt;
среде ''Graphics View Framework'', вы не рисуете изображение непосредственно в окне '''QGraphicsView''' (хотя в принципе это делать можно). Вместо этого вы управляете объектами, хранящимися в модели '''QGraphicsScene'''. Все изменения объектов модели автоматически отображаются в окне '''QGraphicsView'''. При этом вам не нужно заботиться&lt;br /&gt;
о таких вещах, как перерисовка изображения при изменении размеров окна. Поскольку объект класса '''QGraphicsView''' связан с моделью,&lt;br /&gt;
он «знает», что нужно отображать в окне, и обновляет содержимое&lt;br /&gt;
автоматически.&lt;br /&gt;
&lt;br /&gt;
Вторая важная задача, которую решает связка объектов&lt;br /&gt;
'''QGraphicsView''' и '''QGraphicsScene''' – преобразование действий пользователя (таких, как щелчок мышью, перемещение курсора над объектом или нажатие клавиши) в события модели. Последние могут&lt;br /&gt;
быть переданы отдельным примитивам, формирующим модель.&lt;br /&gt;
Эта система передачи событий между разными уровнями ''Graphics View Framework'' именуется в документации ''Qt'' термином «event&lt;br /&gt;
propagation».&lt;br /&gt;
&lt;br /&gt;
Упомянутые выше функции обнаружения столкновений и геометрических преобразований реализованы в классах '''QGraphicsScene''' и&lt;br /&gt;
'''QGraphicsItem'''. Все эти операции выполняются независимо от уровня&lt;br /&gt;
отображения (на него передается только конечный результат операций). Так же, как и в системе ''Interview Framework'', с одной моделью&lt;br /&gt;
''Graphics View'' может быть связано несколько объектов отображения.&lt;br /&gt;
&lt;br /&gt;
===Первая проба===&lt;br /&gt;
&lt;br /&gt;
Рассмотрим работу простейшего приложения ''Graphics View Framework'', выводящего на экран статическое изображение. Эта программа должна выполнить минимальную последовательность операций, необходимых для работы с ''Graphics View Framework'': создать&lt;br /&gt;
объекты '''QGraphicsScene''' и '''QGraphicsView''' и связать их между собой,&lt;br /&gt;
затем заполнить объект '''QGraphicsScene''' графическими примитивами&lt;br /&gt;
и сделать объект '''QGraphicsView''' видимым. Написание программы мы&lt;br /&gt;
начнем с редактирования визуальной части.&lt;br /&gt;
&lt;br /&gt;
Виджет '''QGraphicsView''' расположен на панели виджетов '''Qt Designer''' в разделе '''Display Widgets'''. Класс '''QGraphicsView''' является потомком&lt;br /&gt;
'''Qframe''', и его удобно сделать центральным визуальным элементом&lt;br /&gt;
главного окна. Далее в программе следует создать объект класса&lt;br /&gt;
'''QGraphicsScene''' (это можно сделать, например, в конструкторе главного окна). С помощью метода '''setScene()''' объекта '''QGraphicsView''' мы&lt;br /&gt;
связываем объект '''QGraphicsScene''' с объектом '''QGraphicsView'''.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=c&amp;gt;&lt;br /&gt;
  QGraphicsScene * scene = new QGraphicsScene;&lt;br /&gt;
  graphicsView-&amp;gt;setScene(scene);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Добавлять графические примитивы в объект '''QGraphicsScene''' можно разными способами, в том числе с помощью методов группы '''Add*''' класса '''QGraphicsScene'''. Например, для того, чтобы добавить в сцену&lt;br /&gt;
эллипс, следует вызвать:&lt;br /&gt;
&lt;br /&gt;
 scene-&amp;gt;addEllipse(QRectF(-100.0, -100.0, 100.0, 100.0));&lt;br /&gt;
&lt;br /&gt;
где '''scene''' – объект '''QGraphicsScene'''. Обратите внимание на то, что&lt;br /&gt;
параметры эллипса (точнее, координаты углов прямоугольника, в&lt;br /&gt;
который он вписан) задаются числами с плавающей точкой, а не&lt;br /&gt;
целыми, как обычно принято в растровой графике. Ниже мы увидим, что встроенная в ''Graphics View'' система геометрических преобразований, а также наличие нескольких систем координат, делают&lt;br /&gt;
использование чисел с плавающей точкой совершенно необходимым.&lt;br /&gt;
Координаты, которые мы указали при добавлении эллипса, являются координатами модели, а не графического окна. При отображении&lt;br /&gt;
модели объектом '''QGraphicsView''' они будут автоматически переведены в координаты окна '''QgraphicsView'''.&lt;br /&gt;
&lt;br /&gt;
Как соотносятся точки начала координат модели и начала координат&lt;br /&gt;
окна? Ответ на этот вопрос может показаться неожиданным: соотношение систем координат зависит от размеров изображения и размеров&lt;br /&gt;
окна. По умолчанию графическая система располагает изображение,&lt;br /&gt;
созданное в '''QGraphicsView''', таким образом, чтобы его геометрический&lt;br /&gt;
центр совпадал с центром окна '''QGraphicsView'''. Если размеры изображения превышают размеры окна, в окне появляются полосы прокрутки. Все&lt;br /&gt;
это означает, что не существует простой формулы для перевода координат окна в координаты модели и обратно. Если вас не увлекают занятия&lt;br /&gt;
аналитической геометрией, для пересчета координат лучше воспользоваться специальными функциями, предоставляемыми системой.&lt;br /&gt;
&lt;br /&gt;
Коль скоро речь зашла о координатах, следует отметить, что&lt;br /&gt;
помимо систем координат окна и модели нам придется иметь дело&lt;br /&gt;
с еще одной системой координат – системой координат примитива.&lt;br /&gt;
У каждого графического примитива есть своя система координат,&lt;br /&gt;
которая используется при выполнении над ним геометрических преобразований (перенос, вращение, масштабирование). Мы подробно&lt;br /&gt;
займемся ею ниже.&lt;br /&gt;
&lt;br /&gt;
В процессе передачи событий от одного уровня к другому система ''Graphics View Framework'' выполняет преобразования координат.&lt;br /&gt;
Например, если ваша модель обрабатывает щелчки мыши, координа-&lt;br /&gt;
ты курсора мыши в окне QGraphicsView в момент щелчка будут авто-&lt;br /&gt;
матически переведены в координаты модели. Если событие мыши&lt;br /&gt;
связано с одним из графических примитивов, то координаты курсо-&lt;br /&gt;
ра будут отображены также в систему координат примитива. Таким&lt;br /&gt;
образом, в среде Graphics View зачастую приходится иметь дело с&lt;br /&gt;
тремя наборами координат одной и той же точки (правда, не все эти&lt;br /&gt;
координаты будут нам нужны).&lt;br /&gt;
   Теперь мы должны сделать объект QGraphicsView видимым с&lt;br /&gt;
помощью метода show(). Далее можно скомпилировать программу.&lt;br /&gt;
Система Graphics View является частью ядра Qt, поэтому подклю-&lt;br /&gt;
чать дополнительные модули нам не требуется. В результате работы&lt;br /&gt;
нашей программы мы получаем окно, в котором на белом фоне изо-&lt;br /&gt;
бражена черная окружность. Рисунок этот, конечно, не особенно впе-&lt;br /&gt;
чатляет, но зато наше знакомство с Graphics View Framework можно&lt;br /&gt;
считать состоявшимся.&lt;br /&gt;
Пишем свою игру&lt;br /&gt;
Для более подробного знакомства с возможностями Graphics View&lt;br /&gt;
мы напишем обещанную игру – подобие всем известного «Сокобана»&lt;br /&gt;
(рис. 2). Напомню правила этой древней и мудрой игры: по лабирин-&lt;br /&gt;
ту ходит грузчик, задача которого заключается в том, чтобы пере-&lt;br /&gt;
нести хаотично разбросанные ящики в заранее определенное место.&lt;br /&gt;
Грузчик может только толкать ящик перед собой (тащить его он не&lt;br /&gt;
умеет), причем в каждый момент времени он может толкать только&lt;br /&gt;
один ящик. Полный исходный текст программы вы найдете на диске&lt;br /&gt;
в файле sokoban.tar.gz.&lt;/div&gt;</summary>
		<author><name>Crazy Rebel</name></author>	</entry>

	</feed>