tag:blogger.com,1999:blog-57258428141768200552024-03-12T22:50:56.662-07:00Qt HelpHelperhttp://www.blogger.com/profile/04304451549248332250noreply@blogger.comBlogger5125tag:blogger.com,1999:blog-5725842814176820055.post-79101321899814486772011-02-17T19:41:00.000-08:002011-02-17T19:41:50.962-08:00Обзор некоторых приложений<div dir="ltr" style="text-align: left;" trbidi="on">Сегодня мы немного отвлечемся от основной тематики блога.<br />
Мне хотелось бы продемонстрировать Вам некоторые приложения, написанные с помощью Qt.<br />
<b>VLC Media Player</b> <br />
Начнем со всеми известного плеера VLC Media Player<br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjer4NK0SgzoCbYwA18MrM0otByP4E-Ue4-feH49EUl2Nyr0HXeKctWRkCEKm78VeBfOpgP19iMzfinKYGrMPjaWfFzZM7NekknUptL6GO5ASkZfEmPHrDmnZsyX9TmGqIvkO31bq1n5Tw/s1600/VLC.media.player.1.1.3.Final.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="193" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjer4NK0SgzoCbYwA18MrM0otByP4E-Ue4-feH49EUl2Nyr0HXeKctWRkCEKm78VeBfOpgP19iMzfinKYGrMPjaWfFzZM7NekknUptL6GO5ASkZfEmPHrDmnZsyX9TmGqIvkO31bq1n5Tw/s320/VLC.media.player.1.1.3.Final.jpg" width="320" /><a name='more'></a></a></div>Данный плеер широко известен среди пользователей Linux, но так же приобретает популярность и среди пользователей Windows.<br />
Плеер обладает широкими возможностями.<br />
Данный плеер может открывать не только отдельные видео-файлы, но и проигрывать видео с DVD, присоединяться к сетевым вещаниям и даже с устройств видеозахвата (веб-камер и не только).<br />
Так же в плеере присутствует возможность переключать видео\аудио дорожки, подключать субтитры и перенастраивать аудио-каналы воспроизведения.<br />
В видео-плеере VLC Media Player присутствует возможность ускорять видео и аудио без эффекта повышения тональности звука.<br />
И это далеко не все возможности данного плеера!<br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhQ8VcT3SH9EuWlLxLzuNRN0Xbo2Ie9wXroQTn2-UPOFxI5sC1X5lHlinCaIGYePvKFSvJ1vGkYTU6HWYz1-LFH7D2uiVN0PcpeUsLQ_lcEv7J4dkZ6wKny-FMqFXzdpVZkk4hK_sWZNmU/s1600/vlc2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="227" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhQ8VcT3SH9EuWlLxLzuNRN0Xbo2Ie9wXroQTn2-UPOFxI5sC1X5lHlinCaIGYePvKFSvJ1vGkYTU6HWYz1-LFH7D2uiVN0PcpeUsLQ_lcEv7J4dkZ6wKny-FMqFXzdpVZkk4hK_sWZNmU/s320/vlc2.png" width="320" /></a><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh7GCsL0Ri6eu83vOVDQy2hISgS-OHhTBgRX6FjmKARR6h2bHebSZ3UcV21XWF4fUQdsmp2FgcV6FjbX-cJri8Amc3067vsCEN9o_ejbQGkctsUrPl5e7HXXgoEjtCej986FvVCDgiMzEI/s1600/vlc1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="229" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh7GCsL0Ri6eu83vOVDQy2hISgS-OHhTBgRX6FjmKARR6h2bHebSZ3UcV21XWF4fUQdsmp2FgcV6FjbX-cJri8Amc3067vsCEN9o_ejbQGkctsUrPl5e7HXXgoEjtCej986FvVCDgiMzEI/s320/vlc1.png" width="320" /></a></div><br />
И, по личным ощущениям скажу, что ни на одном из плееров, кроме VLC, мне не удалось просмотреть HD-видео без притормаживаний на моём нетбуке.<br />
<b>qutim</b><br />
Далее мне бы хотелось рассказать о icq-клиенте, которым я пользуюсь.<br />
qutim имеет очень симпатичный интерфейс, обладает возможностью подключать несколько icq и других аккаунтов (mra, jabber, irc).<br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjFdlVgnl_nLBU94JTo_ybaqmq4r0Dp91pVe_4wS7Gu3dwfgpfBDwyprUXy1MJpkFSIGErDfEWQoRcfyltNGftwkgThauJiufP-GBsmBcup6rbVk7iQIYQV_XhYiPDNBrQVqLB5LTh_RdY/s1600/qutim1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjFdlVgnl_nLBU94JTo_ybaqmq4r0Dp91pVe_4wS7Gu3dwfgpfBDwyprUXy1MJpkFSIGErDfEWQoRcfyltNGftwkgThauJiufP-GBsmBcup6rbVk7iQIYQV_XhYiPDNBrQVqLB5LTh_RdY/s1600/qutim1.png" /></a></div>Окно чата вместе со смайлами выглядят довольно симпатично, без лишних элементов. И, конечно же, полностью отсутствует реклама.<br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiRZOpX_iZ3E6ZgME3yfTwJJXWJSsxLCq3rRkrNobKsD4XZjSzRAl7k3gey_g_3GC-5ufevUz2vD__9pg4EvqdAkueTsfOOLsNNXsBAP9k769Z72Qqgr9chj0Q-xoAuN4SZoy-XcDviqHc/s1600/qutim2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiRZOpX_iZ3E6ZgME3yfTwJJXWJSsxLCq3rRkrNobKsD4XZjSzRAl7k3gey_g_3GC-5ufevUz2vD__9pg4EvqdAkueTsfOOLsNNXsBAP9k769Z72Qqgr9chj0Q-xoAuN4SZoy-XcDviqHc/s320/qutim2.png" width="283" /></a></div>Если Вы зайдете в меню "О программе", то увидите, что это приложение написано отечественными разработчиками. Поддержите же их :)<br />
<b>Quamachi</b><br />
Вероятно, каждый из нас слышал о Hamachi.<br />
Quamachi - кроссплатформенный аналог, написанный на Qt.<br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEipugEET185GmrwXYIDeV_crwvV1yOWzzIY46vVyoCa4s8qse8IG1dR60Vpw4K66bDarnxrVO-vEusPZBdEs1PHQvS6XCQje7ZrgKPgJvTkMmF9ew7USlKHvtVES3hz82tj_3pJ3olYe0Q/s1600/57327-1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEipugEET185GmrwXYIDeV_crwvV1yOWzzIY46vVyoCa4s8qse8IG1dR60Vpw4K66bDarnxrVO-vEusPZBdEs1PHQvS6XCQje7ZrgKPgJvTkMmF9ew7USlKHvtVES3hz82tj_3pJ3olYe0Q/s320/57327-1.png" width="289" /></a></div><br />
Для тех, кто впервые слышит о данном продукте: Quamachi позволяет объединяться в "локальные сети" людям с разных концов мира. Зачем? Вот пример: если Вы хотите с другом поиграть по сети в какую-нибудь игру, то, в большинстве игр, режим игры по локальной сети не требует заведения учетной записи, регистрируемой онлайн. Таким образом, Вы сможете поиграть в любимую игру с другом, даже если она получена немного не честным путем :)<br />
Так же Вы можете использовать Quamachi, если хотите разместить у себя ftp-сервер, но динамический ip не позволяет подключаться к Вам извне. Quamachi опять приходит на помощь! Просто объединитесь в сеть, и Вам дадут фиксированный айпи для этой сети, и Ваш друг сможет просмотреть содержимое Вашего ftp-сервера.<br />
<br />
Полезных приложений, написанных на Qt огромное количество.<br />
В настоящее время аудитория пользователей Linux постоянно растет, поэтому необходимость в кросс-платформенных приложениях становится всё выше и выше. Qt же предоставляет нам широкие возможности в области разработки, так давайте воспользуемся ими!</div>Helperhttp://www.blogger.com/profile/04304451549248332250noreply@blogger.com6tag:blogger.com,1999:blog-5725842814176820055.post-4426096121165969672011-02-16T19:59:00.000-08:002011-02-16T20:17:51.732-08:00Обзор некоторых классов (часть 1)<div dir="ltr" style="text-align: left;" trbidi="on">Итак, наконец настало время более детально изучить возможности разработанных классов, применяемых непосредственно в коде.<br />
Если Вы читаете эту статью, то предполагается, что Вы уже ознакомились со средой программирования Qt Creator и можете создать простейшее приложение с обработкой событий.<br />
В данной статье мы изучим класс QString.<br />
Ну чтож, давайте сразу приступим к делу.<br />
Для начала создадим новый проект и назовем его calculator.<br />
Добавим несколько элементов, и изменим параметры инициализации, как показано на рисунке.<br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiBXnI8mV_5wQXXrWx8dOTKXmpVgNINZJynQDUtjAM78Q8bDOD-zMkQDkGyWl3g0dTuLRopXaB1Fbr0oyqArNNDAZaxzSK7_OeWf3t128YlL2xcrijuR3HbWD8kZfJEZW9BlmrH8ppUj2s/s1600/pic.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiBXnI8mV_5wQXXrWx8dOTKXmpVgNINZJynQDUtjAM78Q8bDOD-zMkQDkGyWl3g0dTuLRopXaB1Fbr0oyqArNNDAZaxzSK7_OeWf3t128YlL2xcrijuR3HbWD8kZfJEZW9BlmrH8ppUj2s/s320/pic.png" width="320" /></a></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjShkRhzlHvrR8IgrU_hACZSpBmFuk2HYy4C1ArMAfqzoOkGl-q-IDdKb9rUorJSi2v3g6HgKfOb8A_nmAnYODBOWeKeN9MznyL6oIDaHEWUyHWYns_O2H8l-nXfSsPGXc230hypbbGITU/s1600/pic1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><br />
</a></div><br />
<a name='more'></a>Для левого QLineEdit выставьте значение Name равным num1.<br />
Для среднего QLineEdit выставьте значение Name равным num2. <br />
Для правого QLineEdit выставьте значение Name равным result.<br />
Как Вы уже догадались, в этом примере мы будем делать калькулятор. Калькулятор специально упрощен, ведь главная наша задача не заниматься писаниной алгоритмов (это Вы и так умеете), а рассмотреть необходимые классы.<br />
Итак, по нажатию какой-либо из 6-ти кнопок у нас будет происходить какое-либо событие.<br />
Давайте перейдем к обработке события сложения. Для этого щелкните правой кнопкой на кнопку с надписью "+" и выберите "перейти к слоту", затем в списке сигналов выберите "clicked()" и нажмите "Ок".<br />
Для того, чтобы сложить два числа, нам нужно взять два числа: число из поля num1 и число из поля num2 и результат их сложения поместить в поле result.<br />
Чтобы обратиться к числу (тексту), введенному в какое-либо из полей, нужно использовать метод text(), определенный внутри каждого экземпляра класса QLineEdit.<br />
Метод text() возвращает тип QString(), где слово String переводится как "Строка", т.е. мы получаем строковое значение. Верно предположить, что если мы сложим две строки, то мы получим строку, а не арифметическое сложение чисел, записанных в этой строке.<br />
Чтобы убедиться в этом, попробуем сложить две строки.<br />
В обработке события "нажатие на кнопку +" поместите следующий код:<br />
<i>ui->result->setText(ui->num1->text()+ui->num2->text());</i><br />
Запустите приложение, и попробуйте ввести в первые два поля и нажать "+"<br />
Результат будет следующим:<br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhPUJ3GeyAshUeQ8r-UnYGXeSDZE_eZaO-f2F8fmxmf5tFZtl42Q62wbcNmD19BxZMIL5ay8bjYLZAx1BNcLEkNytCmCAmNMbIWh7MVkISDZVRheiVWogy93hj9NtWmh0GwAGJXhJQV7bo/s1600/pic1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="262" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhPUJ3GeyAshUeQ8r-UnYGXeSDZE_eZaO-f2F8fmxmf5tFZtl42Q62wbcNmD19BxZMIL5ay8bjYLZAx1BNcLEkNytCmCAmNMbIWh7MVkISDZVRheiVWogy93hj9NtWmh0GwAGJXhJQV7bo/s320/pic1.png" width="320" /></a></div>Таким образом реализуется сложение строк.<br />
Но, все-таки давайте вернемся к нашему примеру.<br />
Нам необходимо сложить два числа, для этого нужно как-то "распознать" в строке число.<br />
В любом экземпляре класса QString есть метод toInt() (toDouble(), toFloat(), toLong(),toShot() и т.д.), предназначенный для конвертирования строки в число.<br />
Давайте им и воспользуемся.<br />
Напишем небольшой код:<br />
<i>int num1 = ui->num1->text().toInt();</i> //получаем число из первого поля<br />
<i>int num2 = ui->num2->text().toInt();</i> //получаем число из второго поля<br />
<i>int result = num1 + num2;</i> //складываем и записываем результат<br />
<i>ui->result->setText(result);</i> //задаем текст равным результату<br />
Данный код не cкомпилируется, по причине того, что метод setText() использует тип QString, и не может использовать тип int.<br />
Нам необходимо cконвертировать число обратно в текст.<br />
Для этого существует статичный метод класса QString, названный number.<br />
Использование:<br />
<i>QString res = QString::number(result); </i>//записали в строковую переменную значение результата<br />
Итак, конечный код должен выглядеть следующим образом:<br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiBIqdJueixLw-MFOVsu9PmbrGR4e6G-Ufn2FbcbaQW9gs23gk7KkRuD6jijjILjRmoWZiESFZ-l47M1ScJuA0c7kn4YvswOfFqkdekFCeUS_nFxd9F4nCWCnwgkWORmp1EO5NFYH1ZBes/s1600/pic2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiBIqdJueixLw-MFOVsu9PmbrGR4e6G-Ufn2FbcbaQW9gs23gk7KkRuD6jijjILjRmoWZiESFZ-l47M1ScJuA0c7kn4YvswOfFqkdekFCeUS_nFxd9F4nCWCnwgkWORmp1EO5NFYH1ZBes/s1600/pic2.png" /></a></div>Если Вы запустите приложение, то убедитесь, что оно складывает:<br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhBqMeJn1yEqBPafF3pOF8zSZF8RNOBbtomZofMAuhZguvJo6tYDMz-K2nKgof5ABe6yPslVwbzVD3X1CH16WW1W1NmogbTzJZo4BFb6N2kGhFZChi9thnGeIzr5aYs15mbavw7YG0KfBY/s1600/pic3.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="262" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhBqMeJn1yEqBPafF3pOF8zSZF8RNOBbtomZofMAuhZguvJo6tYDMz-K2nKgof5ABe6yPslVwbzVD3X1CH16WW1W1NmogbTzJZo4BFb6N2kGhFZChi9thnGeIzr5aYs15mbavw7YG0KfBY/s320/pic3.png" width="320" /></a></div>Код получился немного громоздким, и с лишними выделениями памяти, поэтому давайте его сократим до одной строчки.<br />
<i>ui->result->setText(QString::number(ui->num1->text().toInt() + ui->num2->text().toInt()));</i><br />
Попробуйте сами написать обработку события для кнопок "*", "-", "/"<br />
Код для самопроверки представлен ниже: <br />
<i>result->setText(QString::number(ui->num1->text().toInt() * ui->num2->text().toInt()));</i><br />
<i>ui->result->setText(QString::number(ui->num1->text().toInt() - ui->num2->text().toInt()));</i><br />
<i>ui->result->setText(QString::number(ui->num1->text().toInt() / ui->num2->text().toInt()));</i><br />
<ul style="text-align: left;"><li><i>Заметьте, что деление будет работать не совсем корректно, т.к. мы используем целочисленный тип. Для корректной работы деления стоит использовать тип double.</i></li>
</ul>Код:<br />
<i>ui->result->setText(QString::number(ui->num1->text().toDouble() / ui->num2->text().toDouble()));</i><br />
Итак, я готов поздравить вас с неплохим результатом! Вы овладели всеми необходимыми методами преобразований строк в числа и обратно.<br />
Кнопка "С" предназначена для стирания всех данных в полях.<br />
Попробуйте написать код самостоятельно.<br />
Код для самопроверки представлен ниже:<br />
<i>ui->num1->setText("");</i><br />
<i>ui->num2->setText("");</i><br />
<i>ui->result->setText("");</i><br />
Так же Вы можете воспользоваться функцией clear();<br />
<i>ui->num1->clear();</i><br />
<i>ui->num2->clear();</i><br />
<i>ui->result->clear();</i><br />
Осталось написать обработку для одной кнопки "!". Эта кнопка будет вычислять факториал для первого числа.<br />
Давайте напишем простенький алгоритм для этого:<br />
int stop = ui->num1->text().toInt();<br />
int result = 1;<br />
for(int i=1;i<stop+1;i++)<br />
result*=i; <br />
<stop+1;i++) result*="i;" ui-="">ui->result->setText(QString::number(result));</stop+1;i++)><br />
<stop+1;i++) result*="i;" ui-="">Если Вы запустите проект и попробуете сосчитать факториал, то увидите, что всё отлично работает:</stop+1;i++)><br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhWrgu1p0ykj_XHUa-AsE5bJDbQFc4a_yI_ArgV21_Tbofa17OVZKjirAeUJ9E0ykRA-fXaSpnqNXM1b6wAE0EJ6UOuBAUj9JqgiIHR4tfSTu_CHhDCkcxQk44K6qdNuHgqAGQ7WCajUXw/s1600/pic4.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="262" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhWrgu1p0ykj_XHUa-AsE5bJDbQFc4a_yI_ArgV21_Tbofa17OVZKjirAeUJ9E0ykRA-fXaSpnqNXM1b6wAE0EJ6UOuBAUj9JqgiIHR4tfSTu_CHhDCkcxQk44K6qdNuHgqAGQ7WCajUXw/s320/pic4.png" width="320" /></a></div>Можете похвалить себя: Вы уже можете написать простенькое GUI приложение!<br />
В следующей статье мы продолжим знакомство с классами Qt.</div>Helperhttp://www.blogger.com/profile/04304451549248332250noreply@blogger.com7tag:blogger.com,1999:blog-5725842814176820055.post-80277060279707653892011-02-15T19:44:00.000-08:002011-02-15T19:44:50.772-08:00Ознакомление с редакторомИтак, в <a href="http://qtfornewbies.blogspot.com/2011/02/hello-world.html">прошлом занятии</a> мы создали первую программу "Hello, world!"<br />
В этот раз мы познакомимся с редактором, и даже напишем несколько строчек кода.<br />
Для начала, откройте проект с прошлым занятием.<br />
Для этого, нажмите "Файл" -> "Недавние проекты" -> "HelloWorld.pro"<br />
По умолчанию будет выбран раздел "редактор" на левой панели. Если этого не сделано - щелкните на кнопку "редактор" в левой части экрана.<br />
Итак, мы перешли в режим редактирования исходного кода.<br />
В окне "Проект" мы можем наблюдать заголовочные файлы, исходники и файлы форм.<br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj8lV1MSCJ5qoFFHHzT-6-6Lm1p5ABxAODMS2vX67hEu8u5VjgqykCY01fEd06WRo-Tso3jKiSVj7729I1z5GK6RtC_ngp6Jl0WO3YV9ZxZCvjegm9UDR8I0s0T5GKH_2iX29hIZpK1lTk/s1600/pic1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj8lV1MSCJ5qoFFHHzT-6-6Lm1p5ABxAODMS2vX67hEu8u5VjgqykCY01fEd06WRo-Tso3jKiSVj7729I1z5GK6RtC_ngp6Jl0WO3YV9ZxZCvjegm9UDR8I0s0T5GKH_2iX29hIZpK1lTk/s1600/pic1.png" /></a></div>Давайте щелкнем два раза на mainwindow.cpp<br />
<br />
<a name='more'></a><br />
Откроется окно с исходным кодом исходного кода, относящегося к главному окну.<br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh4Kivt_lIMXr3yq1gEkehD5EMrTugowGLcs5EBvrS25pRIIKeacgo8MCpo5BgiO47UnDTh4ofVlAfpxX4uWULtQP7LYROKaR2Nhr7imIybXDqB1f9yW1Mx___c9Vp4-ICkRLhc-w70i-Q/s1600/pic2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="211" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh4Kivt_lIMXr3yq1gEkehD5EMrTugowGLcs5EBvrS25pRIIKeacgo8MCpo5BgiO47UnDTh4ofVlAfpxX4uWULtQP7LYROKaR2Nhr7imIybXDqB1f9yW1Mx___c9Vp4-ICkRLhc-w70i-Q/s320/pic2.png" width="320" /></a></div>Все по-умолчанию пронумерованы. Это удобно для выявления ошибки при неудачном построении. <br />
Как Вы видите, в редакторе встроена система поддержки подсветки синтаксиса. Это сделано для упрощения восприятия написанного кода.<br />
Все ключевые слова подсвечиваются золотистым. Все классы библиотеки Qt подсвечиваются фиолетовым. Все директивы процессора подсвечиваются синим. Все подключаемые файлы подсвечиваются зеленым.<br />
Таким образом, исходный код гораздо приятнее просматривать.<br />
Так же, как Вы заметили, в редакторе присутствует поддержка форматирования, или система отступов.<br />
По-умолчанию система отступов настроена на использование пробелов для отступов, вместо табуляции, как это принято во многих средах разработки. Такое решение обоснованно отсутствием поддержки tab-ов в некоторых редакторах, или различным размером табуляции, что резко приводит легко читаемый код в проблематичный. Но, я не думаю что мы пока собираемся экспортировать наш проект в другую среду, так что следует эту функцию отключить.<br />
Нажмите "Инструменты"->"Параметры", в появившемся окне выберите "Редактор" и настройте параметры редактора так, как показано на изображении ниже<br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhLTb-HI13MfdI_VI_SAGuNlKLZ_ofKNDUhoBeOpl0dyLW8efvzoXCY89fyZrnwC3B88JPQeTfuP4PSHogdRVYkOvTelwsJQdNKL5YaMx0mNzZL89L_xFGXuQIt7XgSt4KxXOAN7HAEU2k/s1600/pic3.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="224" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhLTb-HI13MfdI_VI_SAGuNlKLZ_ofKNDUhoBeOpl0dyLW8efvzoXCY89fyZrnwC3B88JPQeTfuP4PSHogdRVYkOvTelwsJQdNKL5YaMx0mNzZL89L_xFGXuQIt7XgSt4KxXOAN7HAEU2k/s320/pic3.png" width="320" /></a></div><div class="separator" style="clear: both; text-align: center;"></div>После этого нажмите "Ок".<br />
Использование tab-ов упрощает переход между строками кода, так что я настоятельно рекомендую использовать данную функцию.<br />
<span class="Apple-style-span" style="border-collapse: separate; color: black; font-family: Arial; font-size: small; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;">В редакторе Qt Creator'а существует удобная функция автоформатирования текста. Вы можете испробовать её, вручную убрав в коде отступы, или добавив новые, а затем выровнить текст нажатиями Ctrl+A , Ctrl+I.</span><br />
<span class="Apple-style-span" style="border-collapse: separate; color: black; font-family: Arial; font-size: small; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;">Так же, если Вы нажмете Ctrl+<пробел> , то увидите, что редактор подсказывает Вам, какие функции и константы Вы можете использовать. Если начать набирать название какой-либо функции, то список будет автоматически сокращаться, отсеивая все не подходящие варианты.</span><br />
Давайте щелкнем два раза на mainwindow.ui<br />
Перед нами откроется уже видимая нами ранее форма.<br />
Сейчас мы будем описывать событие, которое произойдет по нажатию кнопки PushButton.<br />
В Qt используется система сигналов и слотов для обработки событий. Сигналом, к примеру, может быть нажатие кнопки, или наведение мышки на кнопку, слотом же являются события, которые должны произойти по проишествии сигнала.<br />
Для того, чтобы программа понимала, что какому-то сигналу соответствует какой-то слот, используется функция connect, которая связывает выбранный сигнал с заданным слотом.<br />
Qt никак не ограничивает нас в соединении сигналов и слотов. Одному сигналу можно ставить в соответствие несколько слотов, одному слоту может соответствовать несколько сигналов.<br />
Код слота выполняется в отдельном потоке, т.е. параллельно выполнению основной программы, что приводит к отсутствию "зависаний", как мы могли наблюдать в некоторых библиотеках.<br />
Итак, давайте наконец перейдем от слов к делу, и напишем простенький код для кнопки Push Button.<br />
Нажмите на Push Button правой кнопкой, и вибирете "перейти к слоту", а в появившемся окне "выбор сигнала" выбирите clicked()<br />
Это означает, что наш код будет вызываться по сигналу "кнопка нажата".<br />
После того, как Вы нажмете "Ок", Вы сразу же попадете обратно в редактор. Но, как Вы видете, в файле появился новый код.<br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjTj6SR9Q99i3Y9dUZDXbWaaPPTopr7YrS21iqNNZ7wDj9xiwRuYmWaZqFZqtH-Mo75VBjbVc1uT2J0qZz0WBqG63S8f5Q0l7GAdOkCEUZzldwQ1K3FCnVsUOzcvV3lRT5z76j0T_xRWtA/s1600/pic4.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="292" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjTj6SR9Q99i3Y9dUZDXbWaaPPTopr7YrS21iqNNZ7wDj9xiwRuYmWaZqFZqtH-Mo75VBjbVc1uT2J0qZz0WBqG63S8f5Q0l7GAdOkCEUZzldwQ1K3FCnVsUOzcvV3lRT5z76j0T_xRWtA/s320/pic4.png" width="320" /></a></div>Редактор автоматически создал секцию слота, в котором мы должны описывать наш обработчик. Как видите, название слота очень наглядное: on + <название объекта> + <название сигнала><br />
<ul><li><i>Слово "on" означает, что данный слот был создан автоматически, с помощью среды программирования. Таким образом, запрещено вручную создавать слоты со словом "on" в начале названия.</i></li>
</ul>Редактор выделил красным цветом секцию, в которой код был изменен с момента предыдущей сборки.<br />
Щелкните между двумя фигурными скобочками, и наберите следующий текст:<br />
<i>ui->label->setText("Key was pressed!");</i><br />
Конечный код должен выглядеть следующим образом:<br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhKCxYUD9pVTAqRhzVmnvWzUe3HyPjK9rHFpZ8BLuq0mHPfUrIhsnneJDAEDxm69s4_08jTwsbMp1NQphehKnIA7f9e_ELccO4Eqn9JNgsfwD75pvuhhev3wRSdB5lVvnZnM6SiPLp0usI/s1600/pic5.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="284" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhKCxYUD9pVTAqRhzVmnvWzUe3HyPjK9rHFpZ8BLuq0mHPfUrIhsnneJDAEDxm69s4_08jTwsbMp1NQphehKnIA7f9e_ELccO4Eqn9JNgsfwD75pvuhhev3wRSdB5lVvnZnM6SiPLp0usI/s320/pic5.png" width="320" /></a></div>ui означает, что мы обращаемся к форме, т.е. к <i>User Interface</i>.<br />
Обратите внимение, кто когда Вы введете ui->, то редактор предложит Вам список объектов, которые Вы можете использовать. ui->label означает, что мы обращаемся к объекту с именем label, находящемся на нашей форме. Функция setText задаёт новый текст на label.<br />
Нажмите Ctrl+R, чтобы собрать и запустить ваш проект.<br />
Нажмите кнопку и убедитесь в отличном результате:<br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjwCYbbwiVcpI5uHJTfaaicFRd6-dgunudD1yc1oqtNniZOzbZ2L7uXrvoxDojJjtbJxz2FIrgPY8aKE0dUiKYq-m_PjDn2GVmOaUGThxTaUEE-iTkki02sC7cSDsjp_km53qyPPcIcJV8/s1600/pic6.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjwCYbbwiVcpI5uHJTfaaicFRd6-dgunudD1yc1oqtNniZOzbZ2L7uXrvoxDojJjtbJxz2FIrgPY8aKE0dUiKYq-m_PjDn2GVmOaUGThxTaUEE-iTkki02sC7cSDsjp_km53qyPPcIcJV8/s1600/pic6.png" /></a></div>Текст надписи поменялся! Могу Вас поздравить, это хороший результат для начала!<br />
В следующей статье, мы познакомимся с некоторыми разработанными классами, применяемыми непосредственно в коде.Helperhttp://www.blogger.com/profile/04304451549248332250noreply@blogger.com7tag:blogger.com,1999:blog-5725842814176820055.post-5176298027207213482011-02-14T20:05:00.000-08:002011-02-14T20:08:28.726-08:00Hello, World!Итак, настала пора опробовать некоторый функционал среды Qt Creator.<br />
Для этого потребуется создать проект.<br />
Выбираем "Файл"->"Новый файл или проект"<br />
Перед нами открывается окно выбора, в котором необходимо выбрать следующее:<br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhd-m2aw4lV40qk8lkiSAd3lyVo065YjhFm2xZH6oFw5TP35iFv0xYO9v4JGIDgR38LjOs58KXOHBE-8UUHDC2y6bMn5VQC_qGMEO7dJ45_4R_se2GgTPbNTPdnjgiT9HKEZ8D2UDEqeno/s1600/qt.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="278" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhd-m2aw4lV40qk8lkiSAd3lyVo065YjhFm2xZH6oFw5TP35iFv0xYO9v4JGIDgR38LjOs58KXOHBE-8UUHDC2y6bMn5VQC_qGMEO7dJ45_4R_se2GgTPbNTPdnjgiT9HKEZ8D2UDEqeno/s320/qt.png" width="320" /></a></div><br />
<a name='more'></a><br />
Далее необходимо задать путь для сохранения нашего нового проекта, а так же его имя:<br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi20_rSO9mlxmqOD5Op192WhFzdyeI0UkzJ-lksHiG9_cT9cSPwH7Xu0CvgMNMvv440BmVPjmv9BQE1eUYVEcp5N8OoAEsdSIHgTMMEZyzxrJaJhsKfExNa7NDL9d7hmQRkIwUs6bItYrc/s1600/hello.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="195" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi20_rSO9mlxmqOD5Op192WhFzdyeI0UkzJ-lksHiG9_cT9cSPwH7Xu0CvgMNMvv440BmVPjmv9BQE1eUYVEcp5N8OoAEsdSIHgTMMEZyzxrJaJhsKfExNa7NDL9d7hmQRkIwUs6bItYrc/s320/hello.png" width="320" /></a></div><i>Внимание: конечная директория будет иметь вид "путь к проекту" + " название проекта"</i><br />
Далее необходимо выбрать профиль будущего приложения. Просто поставьте все галочки, не ошибетесь!<br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjmxHKwU7u3TCh4VpfLjTY_AJDGNDy0bpBcNtMUX44wHyG1WryR9gLnKhvK4PuTdk4JAErb82OIg4P-94vVuqvgGMNoLDUsXOorUMI7mZKsogZbO92KYW4P5ctLTyGrhuUYJyjz61I2LdA/s1600/galochki.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="196" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjmxHKwU7u3TCh4VpfLjTY_AJDGNDy0bpBcNtMUX44wHyG1WryR9gLnKhvK4PuTdk4JAErb82OIg4P-94vVuqvgGMNoLDUsXOorUMI7mZKsogZbO92KYW4P5ctLTyGrhuUYJyjz61I2LdA/s320/galochki.png" width="320" /></a></div>Далее будет предложено задать имена начальных файлов и классов, а так же добавить систему контроля версия (о которой мы поговорим позже), просто нажмите "Далее" на этих пунктах.<br />
Итак, мы создали первый проект.<br />
Трудно поверить, но это уже готовое приложение, которое можно запустить! Нажмите на зеленый треугольник (Ctrl+R) в левом нижнем углу, результат будет приблизительно таким:<br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj0C7WFUev7RIitFhaelF7LGBREDDHP8ru_09I0gZHqx_FoQAuCMMfTgxeho2ozal5JIWhsldKZYeR88qzsJEDBlpE_heer3AMPmNsBQ3R6dShthlUiMSOWdD8rueWWj0_y9e3mYbrULOY/s1600/mainWindow.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="263" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj0C7WFUev7RIitFhaelF7LGBREDDHP8ru_09I0gZHqx_FoQAuCMMfTgxeho2ozal5JIWhsldKZYeR88qzsJEDBlpE_heer3AMPmNsBQ3R6dShthlUiMSOWdD8rueWWj0_y9e3mYbrULOY/s320/mainWindow.png" width="320" /></a></div>Итак, перед нами появилось окно с заголовком, которое можно перемещать, сворачивать, разворачивать, изменять размеры, и закрывать. И это всё было сделано всего-лишь в пару кликов!<br />
Но не будем спешить, давайте пока закроем наше приложение и ознакомимся со средой.<br />
Слева мы наблюдаем панель инструментов:<br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjC9M-L_rS1YtPtVFGkNLKIdjNUmuwsD6WHOpV1SxC-7OOUdxiDVMPbWZCkjQl2Zc26WB4GmuEk9cWuiWPTzEY-qO6ZUGS2-3bLz8TtTOkK0Zv_iUxo4wpkkGeJQEmGihSzkcVmken_in0/s1600/panel.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjC9M-L_rS1YtPtVFGkNLKIdjNUmuwsD6WHOpV1SxC-7OOUdxiDVMPbWZCkjQl2Zc26WB4GmuEk9cWuiWPTzEY-qO6ZUGS2-3bLz8TtTOkK0Zv_iUxo4wpkkGeJQEmGihSzkcVmken_in0/s320/panel.png" width="93" /></a></div>Это панель с готовыми классами, упрощающими разработку приложения.<br />
Давайте попробуем добавить кнопку на наше окно. Для этого нажмите на Push Button на панели инструментов и перетащите данный элемент на форму.<br />
Вуаля! Теперь на форме появилась кнопка. Если Вы запустите приложение (Ctrl+R), то увидите, что кнопка действительно отображается.<br />
Первое приложение, по традициям программирования, должно отображать текст "Hello, world!". Для отображения текста лучше всего использовать QLabel. Найдите Label на панели инструментов и перетащите её на форму, расположив рядом с формой.<br />
Должно получиться что-то вроде:<br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjp7lOzti7k8DMAyhjxvTDKE-8CS9FH-NIiBkyqB2GtEOyG-F8Wy3Z1BeS8veAOVuVRnKa7u8lOsuzvI-j5W3xbdbhKe49oCNg_n4X1jBYAnL9mw0cHCmJSMoN-e2FqH2zRrBj7Ozdvjec/s1600/window.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjp7lOzti7k8DMAyhjxvTDKE-8CS9FH-NIiBkyqB2GtEOyG-F8Wy3Z1BeS8veAOVuVRnKa7u8lOsuzvI-j5W3xbdbhKe49oCNg_n4X1jBYAnL9mw0cHCmJSMoN-e2FqH2zRrBj7Ozdvjec/s320/window.png" width="320" /></a></div>Давайте теперь перейдем к изучению панели свойств.<br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgriNY0I8jwRwTOtuSm5eFQU_1hI7rcJzRSyiON9hAU6e_lzawe65bF7fjqz7k5vNpqFRzGVkMr2ztu3FaAE84TU19T-OQycAaCBFD2t4uWYwTBFlu_WIiZV47DGYwz34lAmDOjH86EcwQ/s1600/settings.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgriNY0I8jwRwTOtuSm5eFQU_1hI7rcJzRSyiON9hAU6e_lzawe65bF7fjqz7k5vNpqFRzGVkMr2ztu3FaAE84TU19T-OQycAaCBFD2t4uWYwTBFlu_WIiZV47DGYwz34lAmDOjH86EcwQ/s320/settings.png" width="164" /></a></div>Панель свойств отображает свойства объекта, задаваемые при его инициализации. Названия свойств интуитивно понятны, так что мы не будем на этом отдельно останавливаться. Щелкните на форме на QLabel, который Вы только что разместили, и задайте значение свойства text равным "Hello, world!".<br />
Как Вы видете, отобразился не весь текст. Просто растяните немного QLabel.<br />
Попробуйте изменить размер окна. Для этого щелкните на форму, и потяните за синий квадрат.<br />
Запустите приложение.<br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEixlBthaM8wyv_be00iEVmq61rnjCck9pOB8a0Rz597TC_pfCGrvIR22hYQTFSJ2BHCCUnNL4lwwoi_woQdUxuEPmdhT-84TH27Oql8esK-qH4yvc1nqWThS1acfl2oXghaRF_JGyb0ADI/s1600/hi.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEixlBthaM8wyv_be00iEVmq61rnjCck9pOB8a0Rz597TC_pfCGrvIR22hYQTFSJ2BHCCUnNL4lwwoi_woQdUxuEPmdhT-84TH27Oql8esK-qH4yvc1nqWThS1acfl2oXghaRF_JGyb0ADI/s1600/hi.png" /></a></div>Как и обещалось, мы создали первое приложение, отображающее текст "Hello, world!" и немного ознакомились с средствами среды.<br />
<br />
В следующей статье мы узнаем об основных концепциях программирования GUI-приложений, и перейдем непосредственно к написанию кода.Helperhttp://www.blogger.com/profile/04304451549248332250noreply@blogger.com6tag:blogger.com,1999:blog-5725842814176820055.post-12693736066143685092011-02-14T18:41:00.000-08:002011-02-14T18:41:11.076-08:00Getting StartedИтак, Вы по каким-либо причинам решили ознакомиться с Qt.<br />
Стоит сказать, что это хорошее решение!<br />
Отбросим все предисловия и сразу перейдем к делу. <br />
Прежде всего нам необходима среда, где мы будем воплощать в реальность все наши невероятные проекты.<br />
На выбор даётся два варианта: интеграция Qt в Visual Studio + Qt Designer, или Qt Creator.<br />
Я остановился на Qt Creator поясняя это следующими причинами:<br />
<ul><li>В первом варианте необходимо наличие Visual Studio, которая, как нам известно, платная, что не для всех доступно</li>
<li>Создавать GUI-приложения в Visual Studio используя библиотеки Qt весьма неудобно, потому что приходится работать отдельно в Qt Designer'е</li>
<li>В Visual Studio отсутствует поддержка IntelSence() для Qt</li>
<li>Я упёртый линуксоид, и работать с native-приложениями гораздо приятнее</li>
</ul>Но, выбор в конечном счете, все-равно стоит за Вами.<br />
Скачать можно по следующим ссылкам:<br />
<a href="http://qt.nokia.com/downloads">Qt Creator</a> <a href="http://qt.nokia.com/downloads/visual-studio-add-in">Qt for VS</a><br />
Установка не займет никаких проблем.<br />
<br />
После установки, попробуйте запустить среду Qt Creator.<br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhexTob3TN4WQb6Jds-jmkLrGrTD8T7KaUcZCiU-RMs7WIGf6wh5ZGIJwDy9AIqvv0ZUjF7yWevpVUzVjC2HN89NyEZcODuOTaxEtdefP0q5WkRhsYfd6-FT9pGMgib3KkqEZdKcdjz0KE/s1600/qtcreator.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="249" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhexTob3TN4WQb6Jds-jmkLrGrTD8T7KaUcZCiU-RMs7WIGf6wh5ZGIJwDy9AIqvv0ZUjF7yWevpVUzVjC2HN89NyEZcODuOTaxEtdefP0q5WkRhsYfd6-FT9pGMgib3KkqEZdKcdjz0KE/s320/qtcreator.png" width="320" /></a></div><br />
Если Вы увидете что-то вроде этого, то я готов Вас поздравить с успешной установкой!<br />
<br />
Итак, на этом первый этап завершен! <br />
В следующий раз мы ознакомимся с основными средствами среды программирования Qt Creator а так же напишем первую программу.Helperhttp://www.blogger.com/profile/04304451549248332250noreply@blogger.com4