Форум программистов, компьютерный форум CyberForum.ru

Qt

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 2063, средняя оценка - 4.69
RNT
Автор FAQ
3132 / 352 / 3
Регистрация: 08.08.2009
Сообщений: 1,126
#1

Qt - руководство для новичков - C++ Qt

09.10.2009, 15:56. Просмотров 254793. Ответов 0
Метки нет (Все метки)

Пожелания по улучшению данной статьи пишите сюда

ОГЛАВЛЕНИЕ

1. Предисловие
2. Руководство
2.1. Создаем пустое окно.
2.2. Добавляем виджеты и редактируем их свойства.
2.3. Изменяем свойства виджетов из кода.
2.4. Настраиваем поведение формы.
2.5. Создаем обработчики событий.
2.6. Создаем свои сигналы.
2.7. Используем менеджеры компоновки.
3. FAQ
3.1. Что такое Qt ?
3.2. Что такое слот ?
3.3. Что такое сигнал ?
3.4. Что такое виджет ?
3.5. Как связать сигнал со слотом ?
3.6. Что такое менеджер компоновки ?
3.7. Какие книжки можно почитать ?
3.8. Какую IDE выбрать ?
3.9. Какие еще существуют варианты связывания сигналов и слотов ?
3.10. Что такое отправитель сигнала ?
3.11. Что такое получатель сигнала ?
3.12. Где скачать Qt SDK ?
3.13. Где хранится форма, созданная в Qt Designer ?
3.14. Откуда установить Qt Libraries для других IDE ?
3.15. Как скомпилировать исходник без IDE в LInux ?
3.16. Как скомпилировать исходник без IDE в Windows ?
3.17. Где мне найти Assistant, Designer и прочие программы для Qt, и зачем они нужны ?
3.18. На каких языках можно писать программы с Qt ?
4. Решения часто возникающих проблем
4.1. В пути к папке с исходникам не должно быть русских букв.
4.2. Не найдены dll файлы. (в Windows`е)
4.3. При компиляции проекта возникает ошибка. (в Linux`е)
4.4. В пути к библиотеке Qt не должно быть русских букв.

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 (см.
скриншот
) , после этого откроем файл mywidget.ui двойным щелчком в окне на
скриншоте

2) Добавим на форму два поля редактирования, для этого перетащим с палитры компонентов на форму два Line Edit`a (он находится на вкладке Input Widgets, см.
скриншот
)
3) Добавим на форму две кнопки, для этого перетащим на с палитры компонентова на форму для Push Button`a (он находится на вкладке вкладке Buttons)
4) Отредактируем имена кнопок и текстовых полей. Для этого выделите кнопку, и в инспекторе объектов (см.
скриншот
) отредактируйте свойство objectName, пусть оно будет MyPushButton1. Таким-же образом отредактируйте имя имя второй кнопки, пусть оно будет MyPushButton2.
Таким-же образом отредактируйте имена 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); добавим строчку
C++
1
ui->MyLabel->setText("My first programm");
После этого файл mywidget.cpp должен выглядеть так:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include "mywidget.h"
#include "ui_mywidget.h"
 
MyWidget::MyWidget(QWidget *parent)
    : QWidget(parent), ui(new Ui::MyWidget)
{
    ui->setupUi(this);
    ui->MyLabel->setText("My first programm");
}
 
MyWidget::~MyWidget()
{
    delete ui;
}
4) Спомпилируйте программу
5) Запустите программу и любуйтесь

Подведем итоги:

Мы научились изменять размеры компонентов на форме, а также менять их свойства из кода.
Чтобы обратится к компоненту из кода, надо написать перед его именем ui->, например так:
C++
1
ui->MyLabel->setText("My first programm");
Если вам надо, чтобы какой-нибудь код выполнялся при запуске программы, можете добавить его в конструктор класса MyWidget
------------------------------------------------------------------------------


2.4. Настраиваем поведение формы.

Исходник этого и всех остальных проектов можно найти здесь manual.zip

1) Сделаем , чтобы при нажатии на кнопку с надписью Clear , очищались поля. Для этого откроем Signals and slots editor (см.
скриншот
) , нажмем на крестик и в образовавшейся записи, в поле Sender (отправитель сигнала) выберем MyPushButton2 . В поле Signal (сигнал) выберем Clicked() . В поле Receiver (получатель сигнала) выберерем MyLineEdit1. В поле Slot (слот) выберем Clear().
Еще раз нажмем на крестик, сделаем так-же как написано выше, только в поле 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. В конец класса добавим:
C++
1
2
public slots:
    void MyEventHandler();
Прототипы слотов надо размещать в разделе public slots, если вам нужен публичный слот, или в разделе private slots, если нужен приватный слот и т.д.

После этого файл mywidget.h должен выглядеть так:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#ifndef MYWIDGET_H
#define MYWIDGET_H
 
#include <QtGui/QWidget>
 
namespace Ui
{
    class MyWidget;
}
 
class MyWidget : public QWidget
{
    Q_OBJECT
 
public:
    MyWidget(QWidget *parent = 0);
    ~MyWidget();
 
private:
    Ui::MyWidget *ui;
public slots:
    void MyEventHandler();
};
 
#endif // MYWIDGET_H
Макрос Q_OBJECT необходимо писать в начале определения любого класса, содержащего сигналы или слоты. В наш исходник этот макрос уже был добавлен автоматически.

2) Создадим тело слота, для этого откроем файл mywidget.cpp . В его конец добавим :
C++
1
2
3
4
void MyWidget::MyEventHandler()
{
    ui->MyLineEdit2->setText(ui->MyLineEdit1->text());
}
3) Свяжем сигнал со слотом, для этого в конец конструктора MyWidget (в файле mywidget.cpp) , добавим :
C++
1
QObject::connect(ui->MyPushButton1, SIGNAL(clicked()), this, SLOT(MyEventHandler()));
После всех изменений файл mywidget.cpp должен выглядеть так:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include "mywidget.h"
#include "ui_mywidget.h"
 
MyWidget::MyWidget(QWidget *parent)
    : QWidget(parent), ui(new Ui::MyWidget)
{
    ui->setupUi(this);
    ui->MyLabel->setText("My first programm");
    QObject::connect(ui->MyPushButton1, SIGNAL(clicked()), this , SLOT(MyEventHandler()));
}
 
MyWidget::~MyWidget()
{
    delete ui;
}
 
void MyWidget::MyEventHandler()
{
   ui->MyLineEdit2->setText(ui->MyLineEdit1->text());
}
4) Компилируем программу
5) Запускаем программу, в поле source вводим любой текст и нажимаем Copy. Текст из поля source должен скопироваться в поле Destination

Подведем итоги:

Мы научились создавать свой собственный слот, и связывать его с сигналом. Если вы хотите узнать подробнее про функцию QObject::connect, смотрите FAQ
---------------------------------------------------------------------------------


2.6. Создаем свои сигналы.

Исходник этого и всех остальных проектов можно найти здесь manual.zip

1) Откроем файл mywidget.h. В класс MyWiget добавим раздел сигналов и прототип сигнала.
C++
1
2
signals:
    void MySignal(QString);
Эта запись говорит о том, что в классе MyWiget может быть испущен сигнал MySignal с параметром типа QString. У сигналов должен быть прототип но не должно быть определения т.к. сигнал - это не метод класса. После всех изменений файл mywidget.h должен выглядеть вот так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#ifndef MYWIDGET_H
#define MYWIDGET_H
 
#include <QtGui/QWidget>
 
namespace Ui
{
    class MyWidget;
}
 
class MyWidget : public QWidget
{
    Q_OBJECT
 
public:
    MyWidget(QWidget *parent = 0);
    ~MyWidget();
 
private:
    Ui::MyWidget *ui;
public slots:
    void MyEventHandler();
signals:
    void MySignal(QString);
 
};
 
#endif // MYWIDGET_H
2) Изменим файл mywidget.cpp. Заменим строчку ui->MyLineEdit2->setText(ui->MyLineEdit1->text()); в слоте void MyWidget::MyEventHandler() на
C++
1
emit MySignal(ui->MyLineEdit1->text());
Команда emit испускает сигнал MySignal c содержимым поля MyLineEdit1 в качестве параметра.
3) В конструктор класса MyWidget добавьте следующие две строки:
C++
1
2
QObject::connect(this, SIGNAL(MySignal(QString)), ui->MyLineEdit2, SLOT(setText(QString)));
QObject::connect(this, SIGNAL(MySignal(QString)), ui->MyLabel, SLOT(setText(QString)));
Таким образом мы соединяем наш собственный сигнал MySignal(QString) со слотами сразу двух объектов.
После всех изменений файл mywidget.cpp должен выглядеть вот так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include "mywidget.h"
#include "ui_mywidget.h"
 
MyWidget::MyWidget(QWidget *parent)
    : QWidget(parent), ui(new Ui::MyWidget)
{
    ui->setupUi(this);
    ui->MyLabel->setText("My first programm");
    QObject::connect(ui->MyPushButton1, SIGNAL(clicked()), this, SLOT(MyEventHandler()));
    QObject::connect(this, SIGNAL(MySignal(QString)), ui->MyLineEdit2, SLOT(setText(QString)));
    QObject::connect(this, SIGNAL(MySignal(QString)), ui->MyLabel, SLOT(setText(QString)));
}
 
MyWidget::~MyWidget()
{
    delete ui;
}
 
void MyWidget::MyEventHandler()
{
    emit MySignal(ui->MyLineEdit1->text());
}
4) Скомпилируйте и запустите программу.
5) Напишите какой-нибудь текст в поле Source и нажмите на кнопку Copy. Содержимое поля Source должно скопироваться в другое поле и в текстовую метку MyLabel.
6) Теперь можно объяснить что делает программа. При нажатии на кнопку Copy запускается слот void MyWidget::MyEventHandler(), в нем командой emit MySignal(ui->MyLineEdit1->text()) запускается сигнал MySignal(QString) с содержимым поля MyLineEdit1 в качестве параметра. Следующие две строки
C++
1
2
QObject::connect(this, SIGNAL(MySignal(QString)), ui->MyLineEdit2, SLOT(setText(QString)));
QObject::connect(this, SIGNAL(MySignal(QString)), ui->MyLabel, SLOT(setText(QString)));
соединяют сигнал MySignal(QString) со слотами setText(QString) сразу двух объектов, поля MyLineEdit2 и метки MyLabel. При срабатывании сигнала MySignal(QString), содержимое поля MyLineEdit1 передастся слотам setText(QString), которые напечатают на поле и метке полученый от сигнала текст.

Подведем итоги:
Такой способ копирования текста нерациональный, но зато вы научились создавать свои сигналы.
---------------------------------------------------------------------------------


2.7. Используем менеджеры компоновки.

Исходник этого и всех остальных проектов можно найти здесь manual.zip

1) Откройте ваш проект.
2) Добавьте с панели компонентов на форму виджет Vertical Layout. На форме он выглядит как прямоугольник. Переименуйте его, для этого в Инспекторе Объектов измените свойство objectName, пусть будет MyVerticalLayout.
3) На форме выделите все виджеты (кроме MyVerticalLayout), и перетащите их в прямоугольник MyVerticalLayout`а.
4) Откройте mywidget.cpp. В конструктор класса, сразу после строчки
C++
1
ui->setupUi(this);
добавте строчку
C++
1
setLayout(ui->MyVerticalLayout);
5) Скомпилируйте проект и запустите его. Подцепите край окна мышкой и измените размер окна. Вы увидите, что размеры кнопок и полей ввода изаменяются автоматически.
6) Теперь можно объяснить все проделанные действия. Внутри менеджера компоновки виджеты изменяют размер автоматически, но требуется строкой
C++
1
setLayout(ui->MyVerticalLayout);
указать главный менеджер компоновки для формы. Если вы уберете эту строку, то менеджер компоновки не будет изменять свой размер вместе с окном программы. Вы можете внутрь главного менеджера компоновки вкладывать другие менеджеры компоновки, комбинировать их, использовать распорки. Во вложении, в папке 2.7/variant лежит пример комбинирования менеджеров компоновки и распорок. Вы должны помнить главное: все дополнительные менеджеры компоновки и распорки должны располагаться внутри главного менеджера компоновки, который задается методом:
C++
1
setLayout(ui->MyVerticalLayout);

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() выглядит следующим образом:
C++
1
QObject::connect(отправитель, SIGNAL(сигнал(список параметров сигнала)), получатель, SLOT(список параметров сигнала));
где отправитель и получатель являются указателями на объекты и где сигнал и слот являются членами этих объектов. Список параметров сигнала пишется без имен переменных . SIGNAL() и SLOT() - макросы.
В нашем примере это выглядит вот так:
C++
1
QObject::connect(ui->MyPushButton1, SIGNAL(clicked()), this, SLOT(MyEventHandler()));
Следует обратить внимание на то , что сигнал и слот должны иметь одинаковые параметры !

Примечание: Если вызов происходит из класса, унаследованного от QObject, тогда QObject:: можно опустить. Тоесть написать так:
C++
1
connect(отправитель, SIGNAL(сигнал(список параметров сигнала)), получатель, SLOT(список параметров сигнала));
-----------------------------------------------------------------------

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. Какие еще существуют варианты связывания сигналов и слотов ?


К одному сигналу можно подключать много слотов:
C++
1
2
3
4
QObject::connect(slider, SIGNAL(valueChanged(int)),
        spinBox, SLOT(setValue(int)));
QObject::connect(slider, SIGNAL(valueChanged(int)),
        this, SLOT(updateStatusBarIndicator(int)));
При генерировании сигнала последовательно вызываются все слоты, причем рядок их вызова неопределен.
Один слот можно подключать ко многим сигналам:
C++
1
2
3
4
QObject::connect(lcd, SIGNAL(overflow()),
        this, SLOT(handleMathError()));
QObject::connect(calculator, SIGNAL(divisionByZero()),
        this, SLOT(handleMathError()));
Данный слот будет вызываться при генерировании любого сигнала.
Один сигнал может соединяться с другим сигналом:
C++
1
2
QObject::connect(lineEdit, SIGNAL(textChanged(const QString &)),
        this, SIGNAL(updateRecord(const QString &)));
При генерировании первого сигнала будет также генерироваться второй сигнал, остальном связь «сигнал - сигнал» не отличается от связи «сигнал - слот».
Связь можно аннулировать:
C++
1
2
QObject::disconnect(lcd, SIGNAL(overflow()),
           this, SLOT(handleMathError()));
-----------------------------------------------------------------------

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/sdk-linux-x11-32bit-cpp
Для Linux 64 bit http://qt.nokia.com/downloads/sdk-linux-x11-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 командой
C++
1
#include "ui_mywidget.h"
-----------------------------------------------------------------------

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 и использовать ее для компиляции. Все необходимое для вашей программы будет включено в исполняемый файл. Рассмотрение это варианта выходит за рамки этого руководства. Приведу ссылки на сайты, где можно об этом почитать:
http://www.cyberforum.ru/cpp/thread55812.html
http://www.prog.org.ru/wiki/index.ph...BD%D0%B8%D0%B9
-----------------------------------------------------------------------

4.3. При компиляции проекта возникает ошибка. (в Linux`е)

Возможно ошибка в вашей программе. Но может быть такое, что библиотека Qt, которая установилась при установке Qt SDK, компилировалась на другом дистрибутиве Linux`а и для вашего дистрибутива не подходит. Если так, то при компиляции может выдаваться такая ошибка:

Код
Не выбран корректный профиль Qt. Выберите его в Инструменты - Параметры 
Ошибка во время сборки проекта QMailChecker
Во время выполнения сборки на этапе 'QMake'
Прерванная сборка.
Чтобы проверить, так ли это, попробуйте скомпилировать какой нибудь исходник из папки /home/ваш_логин/qtsdk-2009.03/qt/examples/ или /opt/qtsdk-2009.03/qt/examples/. Если при компиляции возникает ошибка, то надо пересобрать библиотеку Qt. Для этого скачиваете отсюда http://qt.nokia.com/downloads/linux-x11-cpp исходники библиотеки Qt, компилируете, устанавливаете. Затем в Qt Creator`е заходите в Tools(Инструменты)=>Options(Параметры)=>Qt4=>Qt Versions. Там щелкаете на кнопку с плюсом и указываете путь к папке с библиотекой Qt, установленной из исходников. Если вы правильно указали путь, то увидите зеленую галочку. Теперь снова попробуйте скомпилировать исходник из папки /home/ваш_логин/qtsdk-2009.03/qt/examples/ или /opt/qtsdk-2009.03/qt/examples/.
Про решение этой проблемы можно почитать тут http://www.cyberforum.ru/cpp-linux/thread52436.html
-----------------------------------------------------------------------

4.4. В пути к библиотеке Qt не должно быть русских букв.

По умолчанию в Windows`е Qt устанавливается в папку C:\Qt\2009.05\. Если вы установите Qt в другую папку, путь к которой содержит русские буквы, то при компиляции исходников будет появляться такое сообщение об ошибке:

Код
Не выбран корректный профиль Qt. Выберите его в Инструменты - Параметры 
Ошибка во время сборки проекта QMailChecker
Во время выполнения сборки на этапе 'QMake'
Прерванная сборка.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.10.2009, 15:56     Qt - руководство для новичков
Посмотрите здесь:

Основные вопросы, вызывающие сложности у новичков (обсуждение) C++ Qt
C++ Qt Вопрос - Ответ для новичков по Qt
QT widget (для новичков) C++ Qt
C++ Qt Игры на qt для новичков
Посоветуйте книгу для новичков C++ Qt

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Закрытая тема Создать тему
Опции темы

Текущее время: 19:09. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru