![]() 3145 / 365 / 3
Регистрация: 08.08.2009
Сообщений: 1,126
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Qt - руководство для новичков09.10.2009, 15:56. Показов 329876. Ответов 0
Метки нет Все метки)
(
Пожелания по улучшению данной статьи пишите сюда
ОГЛАВЛЕНИЕ 1. Предисловие 2. Руководство 2.1. Создаем пустое окно.3. FAQ 3.1. Что такое Qt ?4. Решения часто возникающих проблем 4.1. В пути к папке с исходникам не должно быть русских букв.1. ПРЕДИСЛОВИЕ Целью данной статьи является помощь в совершении самого первого шага написания приложений посредством библиотеки Qt. Мы не будем пытаться научить читателя программировать под Qt, а только опишем порядок действий при создании простейшего приложения. Обусловлено это тем, что работа с Qt выглядит немного не так, как работа в коммерческих средах разработки от Microsoft или Borland. После того, как читатель на практике "пощупает" процесс создания приложения, после этого будет проще воспринимать литературу по программированию под Qt. При помощи данной статьи новичок научится создавать новый проект, редактировать свойства компонентов на форме визуально и из кода. Научится настраивать поведение формы, и создавать собственные обработчики событий. Практическая часть данного руководства описывает только Qt Creator. Стоит заметить, что данное руководство могут изучать как пользователи Windows, так и пользователи Linux и Mac OS, и других операционных систем, на которые можно установить Qt Creator. Все примеры программ, приведенные в этом руководстве, тестировались на Qt версии 4.5.2. Благодарности Благодарен за помощь в создании статьи Evg, Phantom, RazorQ, odip, oxotnik, cristaloleg, mik-a-el 2. РУКОВОДСТВО 2.1. Создаем пустое окно. Исходник этого и всех остальных проектов можно найти здесь manual.zip В этом этапе научимся создавать проект. 1) Скачайте QT SDK отсюда если у вас Windows. Если у вас другая операционная система, то загляните в FAQ, в "3.12. Где скачать Qt SDK ?" . 2) Установите Qt в папку, путь к которой не содержит русских букв. Иначе при компиляции будут возникать ошибки. 3) Запустите Qt Creator. Если вы установили Qt в папку по умолчанию, то путь к Creator`у в Windows`е будет выглядеть так C:\Qt\2009.05\bin\qtcreator.exe. 4) Создайте проект. Для этого щелкните File(Файл) => New(Новый) => Qt4 Gui Application(GUI приложение Qt4) 5) В поле Name(Название) напишите имя папки с проектом, пусть будет first, пишите английскими буквами, иначе могут быть проблемы при компиляции 6) В поле Create in(Создать в) введите путь к папке, в которой будет создана папка с именем, которое вы ввели в поле Name. Внимание ! В пути к папке с проектом тоже не должно быть русских букв ! 7) В Class name(Имя класса) пишем MyWidget, в Base Class(Базовый класс) выбираем QWidget. 8) Сохраните проект, для этого щелкните File(Файл)=>SaveAll(Сохранить все). После каждого этапа сохраняйтесь. 9) Скомпилируйте программу, для этого щелкните Build(Сборка)=>Build All(Собрать все), вместо этого можно нажать на круглую кнопку с молотком в левом нижнем углу окна Qt Creator`a, (смотрите скриншот
10) Запустите программу , для этого щелкните Build(Сборка)=>Run(Выполнить), вместо этого можно нажать на круглую кнопку с треугольником в левом нижнем углу окна Qt Creator`a, (смотрите скриншот
11) Любуемся на пустое окно. Примечание: если в Windows`е при попытке запустить написанную программу двойным щелчком по файлу выходит окно с ошибкой, то загляните в раздел 4.2. Подведем итоги : Мы научились создавать проект в Qt Creator`e и компилировать его. -------------------------------------------------------------------------------- 2.2. Добавляем виджеты и редактируем их свойства. Исходник этого и всех остальных проектов можно найти здесь manual.zip Виджеты - визуальные объекты на форме, например кнопки, поля, меню. В этом этапе, а также во всех последующих, будет использовать один и тот-же проект. Если вы уже успели закрыть проект, то его надо сначала открыть. Чтобы это сделать, щелкните File(Файл)->Open(Открыть), в появившемся окне откройте файл *.pro вашего проекта. 1) Отредактируем форму, для этого надо сначала перейти в режим редактирования проекта , чтобы это сделать щелкните кнопку Edit (см. скриншот
скриншоте
2) Добавим на форму два поля редактирования, для этого перетащим с палитры компонентов на форму два Line Edit`a (он находится на вкладке Input Widgets, см. скриншот
3) Добавим на форму две кнопки, для этого перетащим на с палитры компонентова на форму для Push Button`a (он находится на вкладке вкладке Buttons) 4) Отредактируем имена кнопок и текстовых полей. Для этого выделите кнопку, и в инспекторе объектов (см. скриншот
Таким-же образом отредактируйте имена Line Edit`ов. Пусть они будут MyLineEdit1 и MyLineEdit2. 5) Отредактируем надписи на кнопках и полях редактирования. Для этого выделите кнопку MyPushButton1 и в инспекторе объектов измените свойство text, пусть оно будет Copy. Таким-же образом измените свойство text кнопки MyPushButton2 пусть оно будет Clear. Таким-же образом отредактируйте свойство text поля MyLineEdit1, пусть оно будет Source. Таким-же образом отредактируйте свойство text поля MyLineEdit2, пусть оно будет Destination. 6) Убедитесь что все правильно сделали. Посмотрите на форму: на одной кнопке должна быть надпись Copy, на другой Clear. В одном поле редактирования должен быть текст Source, в другом Destination. 7) Компилируем программу и любуемся. Подведем итоги : Мы научились изменять свойства компонентов при помощи object inspector`а. Научились переименовывать компоненты и менять надписи на них. ----------------------------------------------------------------------------------- 2.3. Изменяем свойства виджетов из кода. Исходник этого и всех остальных проектов можно найти здесь manual.zip 1) Добавим на форму метку. Для этого из палитры компонентов перетащим на форму компонент Label (он находится на вкладке Display Widgets) . Переименуем его, для этого в инспекторе объектов в свойство objectName напишем MyLabel. 2) Увеличим нашу метку, чтобы в нее влез текст . Для этого схватим ее край мышкой и потянем вправо или влево, чтобы она стала шире. 3) Изменим из кода надпись на MyLabel. Для этого откроем файл mywidget.cpp. Там, в конструкторе класса MyWidget, после ui->setupUi(this); добавим строчку
5) Запустите программу и любуйтесь Подведем итоги: Мы научились изменять размеры компонентов на форме, а также менять их свойства из кода. Чтобы обратится к компоненту из кода, надо написать перед его именем ui->, например так:
------------------------------------------------------------------------------ 2.4. Настраиваем поведение формы. Исходник этого и всех остальных проектов можно найти здесь manual.zip 1) Сделаем , чтобы при нажатии на кнопку с надписью Clear , очищались поля. Для этого откроем Signals and slots editor (см. скриншот
Еще раз нажмем на крестик, сделаем так-же как написано выше, только в поле Receiver выберем MyLineEdit2. 2) Скомпилируйте программу 3) Запустите программу, нажмите на кнопку Clear. Оба поля должны очистится. Подведем итоги: Мы научились в окне Signals and slots editor подключать стандартные сигналы к стандартным слотам. Этим способом можно настроить поведение формы, не написав ни одной строчки кода. Это выгодно отличает Qt от C++ Builder`a и Delphi. Например, чтобы очищать поля по нажатию кнопки (в Delphi или C++ Builder`e, нам бы пришлось создавать обработчик нажатия кнопки, а в нем писать код, который будет очищать текстовые поля. А в Qt мы можем это сделать не загромождая исходник лишними обработчиками событий. --------------------------------------------------------------------------------- 2.5. Создаем обработчики событий. Исходник этого и всех остальных проектов можно найти здесь manual.zip 1) Создадим прототип своего слота, для этого откроем файл mywidget.h. В конец класса добавим:
После этого файл mywidget.h должен выглядеть так:
2) Создадим тело слота, для этого откроем файл mywidget.cpp . В его конец добавим :
5) Запускаем программу, в поле source вводим любой текст и нажимаем Copy. Текст из поля source должен скопироваться в поле Destination Подведем итоги: Мы научились создавать свой собственный слот, и связывать его с сигналом. Если вы хотите узнать подробнее про функцию QObject::connect, смотрите FAQ --------------------------------------------------------------------------------- 2.6. Создаем свои сигналы. Исходник этого и всех остальных проектов можно найти здесь manual.zip 1) Откроем файл mywidget.h. В класс MyWiget добавим раздел сигналов и прототип сигнала.
3) В конструктор класса MyWidget добавьте следующие две строки:
После всех изменений файл mywidget.cpp должен выглядеть вот так:
5) Напишите какой-нибудь текст в поле Source и нажмите на кнопку Copy. Содержимое поля Source должно скопироваться в другое поле и в текстовую метку MyLabel. 6) Теперь можно объяснить что делает программа. При нажатии на кнопку Copy запускается слот void MyWidget::MyEventHandler(), в нем командой emit MySignal(ui->MyLineEdit1->text()) запускается сигнал MySignal(QString) с содержимым поля MyLineEdit1 в качестве параметра. Следующие две строки
Подведем итоги: Такой способ копирования текста нерациональный, но зато вы научились создавать свои сигналы. --------------------------------------------------------------------------------- 2.7. Используем менеджеры компоновки. Исходник этого и всех остальных проектов можно найти здесь manual.zip 1) Откройте ваш проект. 2) Добавьте с панели компонентов на форму виджет Vertical Layout. На форме он выглядит как прямоугольник. Переименуйте его, для этого в Инспекторе Объектов измените свойство objectName, пусть будет MyVerticalLayout. 3) На форме выделите все виджеты (кроме MyVerticalLayout), и перетащите их в прямоугольник MyVerticalLayout`а. 4) Откройте mywidget.cpp. В конструктор класса, сразу после строчки
6) Теперь можно объяснить все проделанные действия. Внутри менеджера компоновки виджеты изменяют размер автоматически, но требуется строкой
3. FAQ 3.1. Что такое Qt ? Qt -- это кроссплатформенная библиотека c открытыми исходними кодами, целью которой является вытеснение нативных API из ваших программ. Сейчас Qt -- это огромный объектно-ориентированный комбайн, в большинстве случаев позволяющий обойтись без привлечения каких-либо иных библиотек. Позволяет запускать написанное с его помощью ПО в большинстве современных операционных систем путём простой компиляции программы для каждой ОС без изменения исходного кода. ----------------------------------------------------------------------- 3.2. Что такое слот ? (slot) Метод, вызываемый автоматически, при испускании присоединенного к нему сигнала. В нашем примере слотом был MyEventHandler() ----------------------------------------------------------------------- 3.3. Что такое сигнал ? (signal) Сообщение, испускаемое при наступлении какого-то события, например нажатия на кнопку. Может передаваться слоту или другому сигналу. Смотрите "5) Как связать сигнал со слотом ?". В нашем примере сигналом был clicked() ----------------------------------------------------------------------- 3.4. Что такое виджет ? Любой визуальный элемент графического интерфейса пользователя. Этот термин происходит от "window gadget" и соответствует элементу управления ("control") и контейнеру ("container") по терминологии Windows. Кнопки, меню, полосы прокрутки и фреймы являются примерами виджетов. ----------------------------------------------------------------------- 3.5. Как связать сигнал со слотом ? При помощи функции QObject::connect() Функция QObject::connect() выглядит следующим образом:
В нашем примере это выглядит вот так:
Примечание: Если вызов происходит из класса, унаследованного от QObject, тогда QObject:: можно опустить. Тоесть написать так:
3.6. Что такое менеджер компоновки ? это объект, который устанавливает размер и положение виджетов, которые располагаются в зоне его действия. Qt имеет три основных класса менеджеров компоновки: • QHBoxLayout размещает виджеты по горизонтали слева направо (или справа налево, в зависимости от культурных традиций); • QVBoxLayout размещает виджеты по вертикали сверху вниз; • QGridLayout размещает виджеты в ячейках сетки. ----------------------------------------------------------------------- 3.7. Какие книжки можно почитать ? Если обнаружите нерабочую ссылку, пишите сюда Сборник книг по Qt Документация Qt на русском и английском Жасмин Бланшет, Марк Саммерфилд "Программирование GUI на C++" Макс Шлее "Qt4 Профессиональное программирование на C++" Юрий Земсков "Программирование на C++ с использованием библиотеки Qt 4" Куликов Г.Э. "Создание графических приложений на платформе Qt. Краткий обзор" А. В. Чеботарев "Библиотека QT4. Создание прикладных приложений в среде Linux" Макс Шлее "Qt. Профессиональное программирование на C++. Наиболее полное руководство" Земсков Ю.В. "Qt 4 на примерах" ----------------------------------------------------------------------- 3.8. Какую IDE выбрать ? Существует много IDE с возможностью использования библиотеки Qt , например Eclipse, KDevelop (для Линукса), QDevelop. Но новичку лучше выбрать Qt SDK (http://ru.wikipedia.org/wiki/Qt_Creator) т.к. в нем уже все есть для начала работы. Qt Assistant , Qt Designer - все это уже включено. ----------------------------------------------------------------------- 3.9. Какие еще существуют варианты связывания сигналов и слотов ? К одному сигналу можно подключать много слотов:
Один слот можно подключать ко многим сигналам:
Один сигнал может соединяться с другим сигналом:
Связь можно аннулировать:
3.10. Что такое отправитель сигнала ? (sender) Объект, имеющий в себе сигнал, и запускающий его при наступлении некоторого события. Например при нажатии на кнопку. В нашем примере отправителем был MyPushButton1 ----------------------------------------------------------------------- 3.11. Что такое получатель сигнала ? (receiver) Объект, имеющий в себе слот , и запускающий его при получении сигнала. В нашем примере получателем сигнала был указатель this. ----------------------------------------------------------------------- 3.12. Где скачать Qt SDK ? Все можно скачать отсюда http://qt.nokia.com/downloads Для Windows http://qt.nokia.com/downloads/sdk-windows-cpp Для Linux 32 bit http://qt.nokia.com/downloads/... -32bit-cpp Для Linux 64 bit http://qt.nokia.com/downloads/... -64bit-cpp Для Mac OS http://qt.nokia.com/downloads/sdk-mac-os-cpp ----------------------------------------------------------------------- 3.13. Где хранится форма, созданная в Qt Designer ? Хранится в файле с расширением *.ui , например наша форма хранится в XML файле mywidget.ui . Перед компиляцией этот файл будет автоматически преобразован в C++ файл ui_mywidget.h, который будет подключаться к файлу mywidget.cpp командой
3.14. Откуда установить Qt Libraries для других IDE ? Qt Libraries можно интегрировать в Visual Studio, Eclipse . Все интеграции можно скачать с http://qt.nokia.com/downloads Интеграцию для Visual Studio можно скачать отсюда http://qt.nokia.com/downloads/visual-studio-add-in Интеграцию для Eclipse можно скачать отсюда http://qt.nokia.com/developer/eclipse-integration ----------------------------------------------------------------------- 3.15. Как скомпилировать исходник без IDE в LInux ? В Linux можно скомпилировать исходник без IDE, достаточно Qt Libraries. Все действия выполняются в консоли. 1) Перейдите в папку с исходниками программы командой cd, например cd /home/rnt/Desktop/first 2) Если у вас есть файл проекта *.pro, переходите к этапу 3. Если его нет, введите qmake -project 3) qmake имя_файла.pro . Например qmake mywidget.pro. Если в каталоге всего один проект, то можно вести только qmake 4) Введите make В папке с исходниками должен появится исполняемый файл. ----------------------------------------------------------------------- 3.16. Как скомпилировать исходник без IDE в Windows ? В Windows можно скомпилировать исходник без IDE, достаточно Qt Libraries и Mingw. Прежде всего надо прописать в переменную окружения Path пути к библиотеке Qt и компилятору Mingw. Делается это так(в Win XP): заходите в Панель Инструментов=>Система=>Дополнительно=>Переменные окружения. Там выберите переменную Path и отредактируйте ее: добавьте, через знак "точка с запятой", C:\Qt\2009.03\qt\bin (у вас может быть по другому), и C:\Qt\2009.03\mingw\bin. Сохраните. Далее открываете консоль и: 1) Перейдите в папку с исходниками программы командой cd, например cd C:\Documents and Settings\RNT\Desktop\example 2) Если у вас есть файл проекта *.pro, переходите к этапу 3. Если его нет, введите qmake -project 3) Подготовить к компиляции проект. Введите qmake имя_файла.pro . Например qmake mywidget.pro. Если в каталоге всего один проект, то можно вести только qmake 4) Введите mingw32-make. Можете указать, собрать бинарник с отладочной информацией или без нее, для этого введите mingw32-make debug или mingw32-make release. Все эти команды можно сохранить в bat файле, класть его в папку с проектом и запускать для сборки. Можете пользоваться bat файлом если вам не удалось прописать пути в переменную окружения Path. Содержимое bat файла может выглядеть вот так: C:\Qt\2009.03\qt\bin\qmake.exe -project C:\Qt\2009.03\qt\bin\qmake.exe C:\Qt\2009.03\mingw\bin\mingw32-make.exe ----------------------------------------------------------------------- 3.17. Где мне найти Assistant, Designer и прочие программы для Qt, и зачем они нужны ? Все эти программы уже интегрированы в Qt Creator, но если вы хотите запустить их отдельно, то вы можете найти их в папке с Qt Libraries. В Windows`е это может быть C:\Qt\2009.03\qt\bin. В этой папке также находятся Qt Demo и Qt Linguist. Qt Creator может находиться в папке C:\Qt\2009.03\bin. В Linux`е Assistant и Designer могут находиться в папке /home/ваш_логин/qtsdk-2009.03/qt/bin или /opt/qtsdk-2009.03/qt/bin/. Qt Creator может находиться в папке /home/ваш_логин/qtsdk-2009.03/bin/ или /opt/qtsdk-2009.03/bin/. Расскажу зачем нужны эти программы: Qt Demo - программа, содержащая описание примеров исходников из папки C:\Qt\2009.03\qt\examples. Qt Assistant - справочная система. Встроена в Qt Creator, но можно запустить отдельно. Qt Linguist - программа для перевода интерфейса написанных в Qt программ на другие языки ----------------------------------------------------------------------- 3.18. На каких языках можно писать программы с Qt ? Основная версия библиотеки Qt расчитана на C++, но есть также «привязки» ко многим другим языкам программирования, но не все из них достаточно развиты. PHP-Qt - для PHP PySide, PyQt - для Python Qt Jambi - для Java QtRuby - для Ruby PerlQt - для Perl Q# - для C# 4. Решения часто возникающих проблем 4.1. В пути к папке с исходникам не должно быть русских букв. Иначе при компиляции можно получить примерно такое сообщение об ошибке: Код
Выполняется сборка проекта hello... Запускается: E:/Qt/qt/bin/qmake.exe F:/Books/Кодинг/Qt/Жасмин Бланшет - QT 4 программирование CUI на C++/examples/chap01/hello/hello.pro -spec win32-g++ -r Cannot find file: f:\Books\Кодинг\Qt\Жасмин Бланшет - QT 4 программирование CUI на C++\examples\chap01\hello\hello.pro. Завершено с кодом возврата 2. Ошибка во время сборки проекта hello Во время выполнения сборки на этапе 'QMake' 4.2. Не найдены dll файлы. (в Windows`е) Если в Windows`е попытаться запустить написанную программу двойным щелчком по файлу, то может выйти ошибка вроде этой: "This application has failed to start because mingwm10.dll was not found. Re-installing the application may fix this problem." Переводится это примерно так: "Программа не может быть запущена, потому-что mingwm10.dll не найден. Переустановка программы может исправить эту ошибку." Есть три варианта решения этой проблемы: 1) Надо просто найти все необходимые файлы(dll), и положить в папку с программой. Найти эти файлы можно в папке, в которую вы установили Qt(у меня C:\Qt\2009.03\qt\bin) . Когда вы все необходимые dll будут в папке с вашей программой, она запустится. 2) Если вы запускаете программу на своем компьютере(с установленной Qt), то будет достаточно прописать путь (в переменной окружения Path) к папке со всеми dll. Заходим в Панель инструментов => Система => Дополнительно => Переменные среды. К переменной Path, через знак "точка с запятой" добавьте путь к папке /qt/bin, у меня например C:\Qt\2009.03\qt\bin. Сохраните. Ваши программы будут работать только на вашем компьютере. Если вы хотите запускать их на чужом компьютере, то используйте первый и третий вариант. 3) Собрать статическую сборку Qt и использовать ее для компиляции. Все необходимое для вашей программы будет включено в исполняемый файл. Рассмотрение это варианта выходит за рамки этого руководства. Приведу ссылки на сайты, где можно об этом почитать: https://www.cyberforum.ru/cpp/thread55812.html http://www.prog.org.ru/wiki/in... 0%B8%D0%B9 ----------------------------------------------------------------------- 4.3. При компиляции проекта возникает ошибка. (в Linux`е) Возможно ошибка в вашей программе. Но может быть такое, что библиотека Qt, которая установилась при установке Qt SDK, компилировалась на другом дистрибутиве Linux`а и для вашего дистрибутива не подходит. Если так, то при компиляции может выдаваться такая ошибка: Код
Не выбран корректный профиль Qt. Выберите его в Инструменты - Параметры Ошибка во время сборки проекта QMailChecker Во время выполнения сборки на этапе 'QMake' Прерванная сборка. Про решение этой проблемы можно почитать тут https://www.cyberforum.ru/cpp-... 52436.html ----------------------------------------------------------------------- 4.4. В пути к библиотеке Qt не должно быть русских букв. По умолчанию в Windows`е Qt устанавливается в папку C:\Qt\2009.05\. Если вы установите Qt в другую папку, путь к которой содержит русские буквы, то при компиляции исходников будет появляться такое сообщение об ошибке: Код
Не выбран корректный профиль Qt. Выберите его в Инструменты - Параметры Ошибка во время сборки проекта QMailChecker Во время выполнения сборки на этапе 'QMake' Прерванная сборка.
202
|
|
09.10.2009, 15:56 | |
Ответы с готовыми решениями:
0
Игры на qt для новичков QT widget (для новичков) Вопрос - Ответ для новичков по Qt Посоветуйте книгу для новичков |
09.10.2009, 15:56 | |
Помогаю со студенческими работами здесь
1
Руководство по отладке для новичков Qt - руководство для новичков LINUX Исходники кода для книги Java 8 (2015) Шилдт - руководство для начинающих Руководство для новичка Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |