Это относится к Qt Creator 2.4.1.
Прежде всего, чтобы использовать и отлаживать вашу библиотеку, вам нужно иметь иерархический топ-проект с двумя подпроектами: один для библиотеки и одиндля приложения, которое его использует.Таким образом, Creator будет перестраивать все, что было изменено до запуска приложения - таким образом, если вы измените исходные файлы библиотеки, библиотека будет перестроена автоматически , а также приложение будет перекомпоновано.
Я покажу, шаг за шагом, как создать три необходимых проекта (библиотека, приложение и верхний проект), в итоге получим готовое к отладке, минимальное приложение и библиотеку.Вы можете легко добавить больше библиотек, выполнив те же действия.
Создание проектов
Создание папки для ваших проектов.
Top Project
File->New File or Project, Other Project, Subdirs Project, Choose
- Назовите проект
top
и поместите его в папку, созданную на шаге 1. - Щелкните по«Готово и добавление подпроекта»
Библиотечный проект - новое окно проекта появляется при переходе по ссылке на предыдущем шаге.
Other Project, C++ Library, Choose
- Тип: измените на Статически связанную библиотеку.
- Назовите проект
library
и поместите его в папку top
, созданную на предыдущем шаге.Эта папка должна быть уже выбрана по умолчанию для вас. - Нажмите, выберите модуль QtCore, который будет использоваться проектом библиотеки, оставьте все остальное по умолчанию.
Application Project - щелкните правой кнопкой мыши проект top
на панели Projects (не на top.pro)
Qt Widget Project, Qt Gui Application, Choose
- Назовите проект
app
и введитеон находится в папке top
, созданной на шаге 2. Эта папка должна быть уже выбрана по умолчанию для вас. - Нажмите, оставьте все в настройках по умолчанию.
Теперь у вас должен быть готовый top
проект, который имеет app
и library
в качестве подпроектов.Нажмите CB (Ctrl-B или Command-B, в зависимости от вашей платформы), чтобы построить его.Сборка должна пройти без ошибок.
Установка зависимостей
Связывание с библиотекой
Подпроект app
еще не использует нашу библиотеку.Чтобы иметь ссылку app
с нашей библиотекой:
Щелкните правой кнопкой мыши app
на панели "Проекты" ( не в app.pro), выберите Add Library...
Выберите Internal Library
, Продолжить
library
является единственным выбором и уже выбран.Нажмите до конца.
Проект app
теперь статически связан с library
.Измените любой файл в проекте app
(будет произведено изменение пробела), чтобы вызвать сборку, затем нажмите CB для сборки.Сборка должна пройти через ОК.
Добавление зависимости верхнего уровня в библиотеку
Подпроект app
будет перестроен, если библиотека будет изменена, но нет ничего, что могло бы гарантировать, что makeСистема сначала создаст подпроект библиотеки, прежде чем приступить к сборке приложения.Такая информация содержится в файле проекта верхнего уровня top.pro
.
Откройте top.pro
и добавьте строку CONFIG += ordered
.Файл должен выглядеть следующим образом:
TEMPLATE = subdirs
SUBDIRS += \
library \
app
CONFIG += ordered
Убедитесь, что SUBDIRS правильно упорядочены: библиотека идет первой перед app.Если порядок неправильный, вы можете перемешать записи в правильном порядке.Обратная косая черта \
является символом продолжения строки. После \
!
не должно быть пробелов. Сохраните файл (CS), щелкните правой кнопкой мыши проект top
и выберите «Перестроить проект« вверху ».Сборка должна завершиться без ошибок.Предупреждения в порядке.
Выбор сборки
В левой нижней панели Qt Creator есть панель с кнопкой сборки (молоток), кнопкой запуска (треугольник), кнопкой отладки (треугольник с ошибкой), селектором сборки ( портативный компьютер с top
именем проекта над ним и конфигурацией elided build ниже. Нажмите на селектор сборки и убедитесь, что вы выбрали Build, заканчивающийся Debug
. Эта сборка настроена для создания отладочных символов, необходимых для ее запуска в отладчик. Он понадобится нам позже.
Реализация библиотеки
Теперь мы добавим некоторый код в класс Library, который был создан для нас Qt Creator. Откройте файлы library.h
и library.cpp
. Добавленный код - это просто статический метод в классе Library. Этот метод будет использоваться в приложении, чтобы показать, что две части на самом деле связаны между собой. Содержимое обоих файлов ниже.
//library.h
#ifndef LIBRARY_H
#define LIBRARY_H
#include <QString>
class Library {
public:
Library();
static QString string();
};
#endif // LIBRARY_H
//library.cpp
#include "library.h"
Library::Library()
{}
QString Library::string()
{
return "I come from the library";
}
Хит C-B, код должен перестраиваться без ошибок.
Реализация приложения
Теперь давайте используем библиотечный API из нашего app
. Откройте файлы mainwindow.cpp
и mainwindow.h
и измените их, как показано ниже.
//mainwindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QScopedPointer>
#include <QMainWindow>
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
private:
QScopedPointer<Ui::MainWindow> const ui;
};
#endif // MAINWINDOW_H
//mainwindow.cpp
#include <QVBoxLayout>
#include <QLabel>
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include "library.h"
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
QVBoxLayout * layout = new QVBoxLayout();
QLabel * label = new QLabel(Library::string(), centralWidget());
layout->addWidget(label);
centralWidget()->setLayout(layout);
}
MainWindow::~MainWindow()
{}
Нажмите C-B, проект должен быть в порядке.
Затем мы можем установить точку останова в реализации Library::string()
, чтобы увидеть, что не только код вызывается, но и что отладчик работает с подпроектами. В library.cpp
щелкните в серой области слева от номера строки в строке return "I come from the library";
. Там, где вы щелкнули, появится красный кружок с маленькими песочными часами: это означает, что была установлена ожидающая точка останова.
Затем нажмите C-Y, чтобы запустить проект в отладчике. Единственный выполняемый подпроект - это приложение, и оно будет автоматически выбрано в качестве запускаемого проекта.
В конечном итоге круг точек останова потеряет песочные часы, поскольку отладчик считывает файлы символов и выясняет местоположение нашей точки останова. Вскоре после этого код остановится в методе Library :: string () - он вызывается из конструктора MainWindow. Нажмите C-Y, чтобы продолжить выполнение app
.
Появится главное окно с текстом I come from the library
внутри него. Этот текст был установлен на метке, которая была добавлена в конструктор MainWindow.