Qt creator

Компиляция и запуск приложения

1. Компиляция приложения

После того, как все компоненты настроены, осталось скомпилировать и запустить наш код. В левом нижнем углу экрана Qt Creator вы можете увидеть кнопку Запустить, жмите на неё.

Подсказка справа говорит нам, что можно использовать сочетание клавиш Ctrl + R для этих целей, запомним это на будущее, дабы сэкономить наше драгоценное время. С другими сочетаниями клавиш можно познакомиться на официальном сайте Qt или в разделе Справка. 

Потребуется немного времени для того, чтобы Qt Creator скомпилировал ваше приложение. В вашем случае это должно занять не более минуты. Тогда как в достаточно сложных проектах компиляция может занимать порядка нескольких десятков минут. После этого вам предстоит сделать выбор устройства для запуска вашего приложения.

2. Выбор устройства для запуска приложения

Всего существуют два варианта для запуска ваших Android-приложений:

  1. Запуск приложения на Android-эмуляторе
  2. Запуск приложения на реальном устройстве

В первом случае вам потребуются виртуальное Android-устройство, а также установка Android Emulator из Android SDK (о том, как это сделать, я расскажу дальше). На этапе выбора компонент установки Android SDK мы указали пункт AVD, поэтому волшебник установки уже создал для нас одно виртуальное устройство Android.

Во втором случае вам потребуется реальное устройство Android (желательно, чтобы это устройство было от известного производителя, потому как неизвестные устройства попросту могут не отображаться в списке доступных устройств).

Список доступных устройств

По завершении процесса компиляции, перед вами должно появиться следующее окно:

В данном окне отображается информация о списке доступных в системе устройств, а также их совместимости с текущей выбранной версией архитектуры вашего приложения. Вы можете запустить ваше приложение только на том устройстве, архитектура которого соответствует выбранной вами на этапе настройки проекта приложения.

Запуск приложения на реальном устройстве

Теперь если вы выбрали использовать своё Android-устройство, то вам нужно сперва убедиться что оно представлено в открывшемся списке доступных устройств. Если вашего устройства в списке нет, то это может произойти по 3-м причинам:

  1. Вы не подключили устройство к компьютеру. Вам нужно подключить ваше устройство через провод USB.
  2. Вы не перевели своё устройство в режим отладки. Обычно это делается путём 7-и кратного нажатия на пункт Номер сборки в разделе меню Настройки -> О телефоне (планшете), после чего выбирается пункт Разрешить отладку по USB в разделе Настройки -> (Дополнительно ->) Для разработчиков. Подробнее о том как это сделать вы можете узнать здесь.
  3. В системе отсутствует драйвер вашего устройства. Это отдельная песня. Если предыдущие пункты выполнены, а устройство так и не обнаружилось, то пока что вам лучше использовать эмулятор.

Запуск приложения на эмуляторе

Если вы хотите использовать эмулятор, то вам скорее всего потребуется установка дополнительной компоненты из Android Studio.

3. Установка Android Emulator

Запустите Android Studio, воспользовавшись значком на вашем Рабочем столе или поиском программ в меню Windows.

Далее вам нужно выбрать пункт Configure в правом нижнем углу открывшегося окна приветствия и нажать на SDK Manager в выпавшем списке.

Если вы хотите создать своё виртуальное AVD устройство, то вам достаточно запустить AVD Manager, который предложит вам эту опцию.

В открывшемся окне настроек перейдите на вкладку SDK Tools и отметьте галочкой пункт Android Emulator. Нажмите на кнопку OK.

Далее подтвердите ваше согласие с лицензией и нажмите Next.

Подождите пока Android Emulator не будет установлен.

4. Запуск вашего первого Android-приложения

Вернёмся к списку доступных Android-устройств. Теперь вам остаётся найти ваше устройство в списке, выбрать его и нажать на кнопку OK.

После этого, если вы используете эмулятор, вам придётся немного подождать пока он загрузится. 

Vola! Теперь вы можете видеть ваше первое Android-творение на экране! (В вашем случае оно может выглядеть несколько иначе.)

Запись данных в файл

Для записи данных в файл, мы сначала открываем файл в режиме записи, затем создаём поток вывода, направленный в файл, и используем оператор

#include
#include

int main() {

QTextStream out(stdout);

// Создаём объект класса QFile и связываем его с указанным именем файла
QString filename = «C:\\distros.txt»;
QFile file(filename);

// Открываем файл в режиме «Только для записи»
if (file.open(QIODevice::WriteOnly)) {
QTextStream out(&file); // поток записываемых данных направляем в файл

// Для записи данных в файл используем оператор

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
29
30

#include
#include
 

intmain(){

QTextStream out(stdout);

// Создаём объект класса QFile и связываем его с указанным именем файла

QString filename=»C:\\distros.txt»;

QFile file(filename);

// Открываем файл в режиме «Только для записи»

if(file.open(QIODevice::WriteOnly)){

QTextStream out(&file);// поток записываемых данных направляем в файл

// Для записи данных в файл используем оператор

out»Xubuntu»endl;

out»Arch»endl;

out»Debian»endl;

out»Redhat»endl;

out»Slackware»endl;

}else{

qWarning(«Could not open file»);

}

// Закрываем файл

file.close();

}

В результате по заданному вами пути программа создаст файл со следующим содержимым:

Установка Qt из репозитория

Инсталляция продукта производится силами стандартного установщика. Решение доступно в официальном репозитории.

Открываем терминал, набираем команду:

sudo apt-get install qt5-default 

Дополнительно установим графическую оболочку QtCreator.

sudo apt-get install qtcreator

Интерфейс программы

Если требуется ознакомиться с практическими вариантами, то проинсталлируем тестовые программы. Они созданы на Qt и также доступны в официальных репозиториях.

sudo apt install qtbase5-examples qtdeclarative5-examples

Приложение запускается как через ярлык, так и через терминал.

Взаимодействие виджетов

Мы заканчиваем этот урок примером, который демонстрирует возможность виджетов взаимодействовать друг с другом. Код данного примера разделён на три файла.

Следующий код является заголовочным файлом, в котором мы определяем два слота и виджет .

plusminus.h:

#pragma once

#include
#include
#include
#include

class PlusMinus : public QWidget {

Q_OBJECT // этот макрос должен включаться в классы, которые объявляют свои собственные сигналы и слоты

public:
PlusMinus(QWidget *parent = 0);

private slots:
void OnPlus();
void OnMinus();

private:
QLabel *lbl;

};

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22

#pragma once
 
#include
#include
#include
#include
 

classPlusMinuspublicQWidget{

Q_OBJECT// этот макрос должен включаться в классы, которые объявляют свои собственные сигналы и слоты

public

PlusMinus(QWidget*parent=);

privateslots

voidOnPlus();

voidOnMinus();

private

QLabel*lbl;

};

У нас есть две кнопки и виджет . С помощью кнопок мы увеличиваем или уменьшаем число, отображаемое в .

plusminus.cpp:

#include «plusminus.h»
#include

PlusMinus::PlusMinus(QWidget *parent)
: QWidget(parent) {

QPushButton *plsBtn = new QPushButton(«+», this);
QPushButton *minBtn = new QPushButton(«-«, this);
lbl = new QLabel(«0», this);

QGridLayout *grid = new QGridLayout(this);
grid->addWidget(plsBtn, 0, 0);
grid->addWidget(minBtn, 0, 1);
grid->addWidget(lbl, 1, 1);

setLayout(grid);

connect(plsBtn, &QPushButton::clicked, this, &PlusMinus::OnPlus);
connect(minBtn, &QPushButton::clicked, this, &PlusMinus::OnMinus);
}

void PlusMinus::OnPlus() {

int val = lbl->text().toInt();
val++;
lbl->setText(QString::number(val));
}

void PlusMinus::OnMinus() {

int val = lbl->text().toInt();
val—;
lbl->setText(QString::number(val));
}

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
29
30
31
32
33
34

#include «plusminus.h»
#include
 

PlusMinus::PlusMinus(QWidget*parent)

QWidget(parent){

QPushButton*plsBtn=newQPushButton(«+»,this);

QPushButton*minBtn=newQPushButton(«-«,this);

lbl=newQLabel(«0»,this);

QGridLayout*grid=newQGridLayout(this);

grid->addWidget(plsBtn,,);

grid->addWidget(minBtn,,1);

grid->addWidget(lbl,1,1);

setLayout(grid);

connect(plsBtn,&QPushButton::clicked,this,&PlusMinus::OnPlus);

connect(minBtn,&QPushButton::clicked,this,&PlusMinus::OnMinus);

}
 

voidPlusMinus::OnPlus(){

intval=lbl->text().toInt();

val++;

lbl->setText(QString::number(val));

}
 

voidPlusMinus::OnMinus(){

intval=lbl->text().toInt();

val—;

lbl->setText(QString::number(val));

}

А здесь происходит соединение сигналов с соответствующими слотами:

connect(plsBtn, &QPushButton::clicked, this, &PlusMinus::OnPlus);
connect(minBtn, &QPushButton::clicked, this, &PlusMinus::OnMinus);

1
2

connect(plsBtn,&QPushButton::clicked,this,&PlusMinus::OnPlus);

connect(minBtn,&QPushButton::clicked,this,&PlusMinus::OnMinus);

В методе OnPlus() мы определяем текущее значение в . Виджет отображает строковое значение, поэтому сначала его нужно преобразовать в целое число. Затем мы это число увеличиваем, конвертируем получившееся число снова в строковое значение и устанавливаем новый текст для :

void PlusMinus::OnPlus() {
int val = lbl->text().toInt(); // выполняем конвертацию в тип int
val++; // выполняем инкремент значения
lbl->setText(QString::number(val)); // конвертируем обратно в Qstring и устанавливаем новый текст для label
}

1
2
3
4
5

voidPlusMinus::OnPlus(){

intval=lbl->text().toInt();// выполняем конвертацию в тип int

val++;// выполняем инкремент значения

lbl->setText(QString::number(val));// конвертируем обратно в Qstring и устанавливаем новый текст для label

}

А это уже наш основной файл — main.cpp:

#include «plusminus.h»

int main(int argc, char *argv[]) {
QApplication app(argc, argv);

PlusMinus window;

window.resize(300, 190);
window.setWindowTitle(«Plus minus»);
window.show();

return app.exec();
}

1
2
3
4
5
6
7
8
9
10
11
12
13

#include «plusminus.h»
 

intmain(intargc,char*argv){

QApplication app(argc,argv);

PlusMinus window;

window.resize(300,190);

window.setWindowTitle(«Plus minus»);

window.show();

returnapp.exec();

}

Результат выполнения программы выше:

Иерархия классов ПО

QT широко использует наследование, особенно в модуле Widgets. QObject — это базовый класс. Он предоставляет некоторые очень мощные возможности:

Можно установить имя как строку для поиска объектов.
Родительскую систему.
Сигналы и слоты.
Управление событиями.

Виджеты могут реагировать на события и использовать систему родительских систем, сигналов и слотов. Они наследуются от QObject. Самый простой виджет — QWidget. Он содержит большинство свойств, которые используются для описания окон или виджетов, таких как положение и размер, курсор мыши и всплывающие подсказки.

В QT виджет также может быть окном. Таким образом, нет необходимости в классе QWindow. Почти все графические элементы наследуются от QWidget:

QAbstractButton, базовый класс для всех типов кнопок.
QT удлинение масштаба.
QPushButton.
QCheckBox.
QRadioButton.
QFrame, который отображает рамку.
QLabel, который отображает текст или изображение.

Это наследование выполняется для облегчения управления свойствами. Некоторые из них, такие как размер и курсоры, могут быть применимы на других графических компонентах, а QAbstractButton предоставляет качества, которые совместно используются всеми кнопками.

widget.cpp

First construct the walls in the graphic scene, which will run across our hero. And for this class in the constructor of the main window prescribe the following lines.

    scene->addRect(0,0,520,20,QPen(Qt::NoPen),QBrush(Qt::darkGray));
    scene->addRect(0,0,20,520,QPen(Qt::NoPen),QBrush(Qt::darkGray));
    scene->addRect(0,500,520,20,QPen(Qt::NoPen),QBrush(Qt::darkGray));
    scene->addRect(500,0,20,520,QPen(Qt::NoPen),QBrush(Qt::darkGray));
    scene->addRect(170,250,180,20,QPen(Qt::NoPen),QBrush(Qt::darkGray));
    scene->addRect(250,170,20,180,QPen(Qt::NoPen),QBrush(Qt::darkGray));

mainwindow.cpp

Initialize both secondary windows are in the main window and use the signals and slots system, these windows are displayed on the signals from the main window buttons. At the same time the main window will be closed.

#include "mainwindow.h"
#include "ui_mainwindow.h"

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    // Initialize the second window
    sWindow = new AnotherWindow();
    // connected to the slot start the main window on the button in the second window
    connect(sWindow, &AnotherWindow::firstWindow, this, &MainWindow::show);

    // Initialize the third window
    thirdWindow = new AnotherWindow();
    // connected to the slot start the main window on the button in the third window
    connect(thirdWindow, &AnotherWindow::firstWindow, this, &MainWindow::show);
}

MainWindow::~MainWindow()
{
    delete ui;
}

void MainWindow::on_pushButton_clicked()
{
    sWindow->show();  // Show a second window
    this->close();    // Close the main window
}

void MainWindow::on_pushButton_2_clicked()
{
    thirdWindow->show();  // Show a third window
    this->close();    // Close the main window
}

Установка Qt Creator в Linux

В этих уроках используется операционная система Linux (Debian 9.x 64-bit), поэтому мы скачиваем , но вы также можете использовать соответствующие файлы Qt для Windows или Mac:

После окончания загрузки переходим в папку с необходимым нам файлом, нажимаем по нему правой кнопкой мыши и выбираем «Свойства». В закладке «Основные» видим «Имя», «Тип», «Размер файла», а также наименование родительской папки:

Переходим на вкладку «Права» и ставим галочку в поле «Разрешить выполнение файла как программы»:

Закрываем «Свойства» и запускаем программу.

Шаг №2: На следующем этапе установщик сообщает, что нам предоставлена версия с открытым исходным кодом Qt 5.13.0. Дальнейшая установка Qt предполагает регистрацию в Qt и создание Qt Account, который предоставляет доступ ко всем возможностям Qt. Кроме того, данное действие необходимо для проверки лицензии (коммерческая/некоммерческая). Если у вас уже есть учётная запись в Qt Account, то используйте кнопку «Next».

Если учётной записи в Qt Account у вас ещё нет, то её можно создать сейчас: для этого перейдите по соответствующей ссылке в установщике, и вы будете перенаправлены на сайт qt.io в соответствующий раздел, или просто используйте кнопку «Next» — вы сможете это сделать в следующем шаге:

Шаг №3: Здесь необходимо ввести логин и пароль от Qt Account или создать Qt Account, если его ещё нет. Кнопка «Next» переводит нас на следующий этап:

 Добро пожаловать в настройки Qt 5.13.0! Для перехода к следующему шагу нажимаем «Далее»:

Шаг №4: Выбираем каталог для установки Qt 5.13.0

Обратите внимание, адрес каталога указывается латинскими буквами (без кириллицы) и без пробелов! После того, как выбрали каталог, нажимаем «Далее»:

Шаг №5: Выбираем компоненты, которые хотим установить. Если на данном этапе нет уверенности в выборе конкретных компонентов, то добавление и удаление можно будет сделать позже, после установки программы:

Шаг №6: Принимаем лицензионное соглашение:

И нажимаем на кнопку «Установить»:

Для завершения установки нажимаем «Завершить». После завершения загрузки Qt Creator запустится самостоятельно (для этого необходимо по умолчанию оставить галочку в поле «Launch Qt Creator»):

Вот примерно следующее вы должны увидеть при запуске Qt Creator:

Поздравляем! Qt Creator установлен.

Как загрузить текстовой файл в QString?

Подключите заголовочные файлы:

#include
#include

1
2

#include
#include

Можно воспользоваться любой из двоих функций:

QString readfile(QString filename)
{
/*
Функция считывает текстовой файл в QString.
Входные параметры:
filename — имя файла.
Возвращаемое значение:
Строка со всем содержимым текстового файла.
*/
QFile file(filename);
QString line=»»;
if(!file.exists()){
qDebug()

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21

QString readfile(QString filename)

{

/*

    Функция считывает текстовой файл в QString.
    Входные параметры:
     filename — имя файла.
    Возвращаемое значение:
     Строка со всем содержимым текстового файла.
    */

QFile file(filename);

QString line=»»;

if(!file.exists()){

qDebug()»Не существует «filename;

}else{

qDebug()filename» загружается…»;

}

if(file.open(QIODevice::ReadOnly|QIODevice::Text))

line=file.readAll();

file.close();

returnline;

}

QString readfile2(QString filename)
{
/*
Функция считывает текстовой файл в QString. Загружает построчно.
Входные параметры:
filename — имя файла.
Возвращаемое значение:
Строка со всем содержимым текстового файла.
*/
QFile file(filename);
QString line=»»;
if(!file.exists()){
qDebug()

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

QString readfile2(QString filename)

{

/*

    Функция считывает текстовой файл в QString. Загружает построчно.
    Входные параметры:
     filename — имя файла.
    Возвращаемое значение:
     Строка со всем содержимым текстового файла.
    */

QFile file(filename);

QString line=»»;

if(!file.exists()){

qDebug()»Не существует «filename;

}else{

qDebug()filename» загружается…»;

}

if(file.open(QIODevice::ReadOnly|QIODevice::Text)){

QTextStream stream(&file);

while(!stream.atEnd()){

line+=stream.readLine()+»\n»;

}

}

file.close();

returnline;

}

Например, так:

QString line;
line = readfile(«test.txt»);

1
2

QString line;

line=readfile(«test.txt»);

triangle.cpp

Compared to the latest version of the code will be several changes. Namely, the reduced size of the main character, the red triangle. And change the bullet point of departure, it will be placed in front of the main character. This change in addition to making the collision detection.

// Resize the hero
QRectF Triangle::boundingRect() const
{
    return QRectF(-12,-15,24,30);
}

/* Return the form of a hero
 * In this case it is better to use an ellipse
 * */
QPainterPath Triangle::shape() const
{
    QPainterPath path;
    path.addEllipse(boundingRect());
    return path;
}

void Triangle::slotBulletTimer()
{
    /// If shooting is enabled, the call signal to the creation of a bullet
    if(shot) emit signalBullet(mapToScene(0,-25), target);

}

Detection of collisions will produce in

game timer

slot in the code section, where check the status of the pressed keys.

void Triangle::slotGameTimer()
{
    /** Move a triangle as a function of the buttons pressed
     * */
    if(GetAsyncKeyState('A')){
        this->setX(this->x() - 1);
        /* Check the collision,
          * If a collision occurred,
          * Then return the hero back to the starting point
         * */
        if(!scene()->collidingItems(this).isEmpty()){
            this->setX(this->x() + 1);
        }
    }
    if(GetAsyncKeyState('D')){
        this->setX(this->x() + 1);
        if(!scene()->collidingItems(this).isEmpty()){
            this->setX(this->x() - 1);
        }
    }
    if(GetAsyncKeyState('W')){
        this->setY(this->y() - 1);
        if(!scene()->collidingItems(this).isEmpty()){
            this->setY(this->y() + 1);
        }
    }
    if(GetAsyncKeyState('S')){
        this->setY(this->y() + 1);
        if(!scene()->collidingItems(this).isEmpty()){
            this->setY(this->y() - 1);
        }
    }

    // Source from previous lessons
}

Проверка №2

Проверим сколько дней прошло с 1 января.

Подключаем инклуд.

#include «boost/date_time/gregorian/gregorian.hpp»

1 #include «boost/date_time/gregorian/gregorian.hpp»

И включаем соответствующее пространство имен.

using namespace boost::gregorian;

1 using namespaceboost::gregorian;

Теперь в коде клика кнопки можем прописать.

date today = day_clock::local_day();
partial_date new_years_day(1,Jan);
days days_since_year_start = today — new_years_day.get_date(today.year());

ui->textEdit->insertPlainText(QString::number(days_since_year_start.days()) + «\n»);

1
2
3
4
5

date today=day_clock::local_day();

partial_date new_years_day(1,Jan);

days days_since_year_start=today-new_years_day.get_date(today.year());

ui->textEdit->insertPlainText(QString::number(days_since_year_start.days())+»\n»);

Полный код.

#include «mainwindow.h»
#include «ui_mainwindow.h»

#include
#include «boost/date_time/gregorian/gregorian.hpp»

using namespace boost::math;
using namespace boost::gregorian;

MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
}

MainWindow::~MainWindow()
{
delete ui;
}

void MainWindow::on_pushButton_clicked()
{
boost::uint32_t k = prime(7);
ui->textEdit->insertPlainText(QString::number(k) + «\n»);
}

void MainWindow::on_pushButton_2_clicked()
{
date today = day_clock::local_day();
partial_date new_years_day(1,Jan);
days days_since_year_start = today — new_years_day.get_date(today.year());

ui->textEdit->insertPlainText(QString::number(days_since_year_start.days()) + «\n»);

}

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
29
30
31
32
33
34
35
36

#include «mainwindow.h»
#include «ui_mainwindow.h»
 
#include
#include «boost/date_time/gregorian/gregorian.hpp»
 

using namespaceboost::math;

using namespaceboost::gregorian;

MainWindow::MainWindow(QWidget *parent)

QMainWindow(parent),

ui(newUi::MainWindow)

{

ui->setupUi(this);

}
 

MainWindow::~MainWindow()

{

delete ui;

}
 

voidMainWindow::on_pushButton_clicked()

{

boost::uint32_tk=prime(7);

ui->textEdit->insertPlainText(QString::number(k)+»\n»);

}
 

voidMainWindow::on_pushButton_2_clicked()

{

date today=day_clock::local_day();

partial_date new_years_day(1,Jan);

days days_since_year_start=today-new_years_day.get_date(today.year());

ui->textEdit->insertPlainText(QString::number(days_since_year_start.days())+»\n»);

 
}

Вот и всё!

P.S. Жесть, а не установка. Не нравится мне эта библиотека.

Установка библиотеки Qwt

Полноценная среда разработки GUI должна иметь в своем составе средства
графического представления информации с развитым интерфейсом пользователя.
В Delphi и C++Builder эту роль выполняет компонент TChart.
Дополнением к библиотеке Qt, предоставляющим возможность отображать
данные в графическом виде, является библиотека Qwt. Рассмотрим процесс
ее сборки и установки.

Заранее договоримся, что непосредственно файлы библиотеки Qwt будут собираться
в обеих конфигурациях релизной и отладочной, плагин для дизайнера форм
в релизной конфигурации (плагин, собранный в отладочной конфигурации,
дизайнер не воспринимает). Примеры использования виджетов, поставляемые с библиотекой
Qwt, будут собираться, в качестве демонстрации, в отладочной конфигурации.
Библиотека Qwt доступна для загрузки на
сайте
разработчика, архив

qwt-6.1.2.zip
    5 MB
(версия на момент написания статьи)

Его необходимо распаковать и внести в исходники некоторые
изменения. Это можно сделать
в текстовом редакторе или воспользоваться
патчем.

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

Linux

Подразумевается, что у Вас уже установлена библиотека Qt 5 (см.
статью) в папку /home/login/Qt/Qt5,
где /home/login Ваша домашняя папка, а
login имя пользователя

Пусть сборка библиотеки Qwt
будет производиться в папке /home/login/TEMP/qwt-6.1.2,
а установка в папку /home/login/Qt/qwt6.
Внимание! Не забывайте далее по тексту вместо login
подставлять свое имя пользователя

1. Скачиваем архив с исходниками Qwt (см. выше), распаковываем
в папку /home/login/TEMP. Вносим необходимые изменения (см. выше)
с помощью текстового редактора.

Если изменений много (не в данном случае), то можно воспользоваться патчем
(см. выше). Скачиваем архив qwt612_patch.zip, распаковываем его в папку
/home/login/TEMP/qwt-6.1.2. Запускаем терминал и вводим команды

sudo apt-get install dos2unix
   если пакет еще не установлен
cd /home/login/TEMP/qwt-6.1.2
dos2unix designer/designer.pro
dos2unix examples/examples.pri
dos2unix textengines/mathml/mathml.pro
dos2unix qwtconfig.pri
patch -Np1 -i qwt612.patch

Открываем в текстовом редакторе файл qwtconfig.pri
и правим путь установки заменяем login на свое имя пользователя.

2. Выполняем в терминале команды

cd /home/login/TEMP/qwt-6.1.2
/home/login/Qt/Qt5/5.5/gcc/bin/qmake qwt.pro -r -spec linux-g++
make
make install

3. Для того, чтобы файлы установленной библиотеки Qwt были доступны приложениям,
убеждаемся, что в файле /etc/ld.so.conf прописано

include /etc/ld.so.conf.d/*.conf

создаем файл /etc/ld.so.conf.d/qwt.conf со следующим содержимым

# Qwt libs configuration
/home/login/Qt/Qwt6/lib

и выполняем в терминале

sudo ldconfig

4. Устанавливаем плагин Qwt (см. выше).

Windows

Пусть сборка библиотеки Qwt будет производиться в папке
E:\TEMP\qwt-6.1.2.

1. Скачиваем архив с исходниками Qwt (см. выше), распаковываем
в папку E:\TEMP. Вносим необходимые изменения (см. выше)
с помощью текстового редактора.

Если изменений много (не в данном случае), то можно воспользоваться патчем
(см. выше). Скачиваем архив qwt612_patch.zip, распаковываем его в папку
E:\TEMP\qwt-6.1.2. Запускаем MinGW Shell
(см. MinGW 4.6.2) и вводим команды

cd /e/TEMP/qwt-6.1.2
patch -Np1 -i qwt612.patch

Открываем в текстовом редакторе файл qwtconfig.pri
и проверяем путь установки.

Дальнейшие действия зависят от выбранной связки инструментов.

Qt 5 и MinGW

Предполагается, что библиотека Qwt будет устанавливаться в папку
C:\Qt\qwt-6.1.2.

2. Запускаем оболочку
Qt 5.5 for Desktop (MinGW 4.9.2 32 bit)
(см. группу ярлыков библиотеки Qt в меню Пуск) и поочередно вводим команды

cd /D E:\TEMP\qwt-6.1.2
qmake qwt.pro -r -spec win32-g++
mingw32-make
mingw32-make install

3. Устанавливаем плагин Qwt (см. выше).

Qt 5 и MSVC 2010

Предполагается, что библиотека Qwt будет устанавливаться в папку
D:\Qt\qwt-6.1.2-vs.

2. Запускаем оболочку
Qt 5.5 32-bit for Desktop (MSVC 2010)
(см. группу ярлыков библиотеки Qt в меню Пуск) и поочередно вводим команды

cd /D E:\TEMP\qwt-6.1.2
qmake qwt.pro -r -spec win32-msvc2010
nmake
nmake install

3. Устанавливаем плагин Qwt (см. выше).

Пример использования виджета QwtPlot из
библиотеки Qwt можно посмотреть здесь.

6 ответов

55

Лучший ответ

У меня были те же проблемы и, наконец, выяснили, как это решить. Styne666 дал мне подсказку. Выполните следующие действия:

  • Инструменты
  • Параметры…
  • Сборка и запуск
  • Цепочки инструментов
  • Используйте кнопку «Клонировать», чтобы сделать копию каждого из автоматически обнаруженных элементов MSVC.
  • В каждом из клонированных элементов вы можете указать отладчик в поле «Отладчик» (например, C:\Program Files\Windows Kits\8.0\Debuggers\x64\cdb.exe)
  • После этого все, кажется, работает…

Колби

{редактировать}

Следует также отметить, что если вы используете 64-разрядную версию Windows и 32-разрядную версию Qt Creator, как я, вам нужно убедиться, что вы указываете на 32-разрядные версии cdb ( из которых имеются целевые версии x86 и x64). Поэтому для 32-битных целевых построений я запускаю это:

И для сборки x64 я запускаю это:

Сложная часть заключается в том, что несколько сложно заставить Microsoft установить 32-разрядную версию средств отладки на вашей 64-разрядной машине. Сотрудник попытался сделать это недавно и сказал, что ему нужно установить инструменты Windows 8, чтобы иметь возможность сделать это — версии Windows 7 не позволят вам.

Ответ дал

14 апр. 2012, в 03:16
Поделиться

3

Пришло время выяснить это с помощью Qt Creator 2.6.0 (в Windows 7), так вот вот:

  • Инструменты, параметры…
  • Вкладка «Сборка и запуск», «Наборы» выберите «Рабочий стол (по умолчанию)» (в разделе «Руководство» )
  • Нажмите кнопку «Управление» и выберите «Изменить» в правой части
    «Debugger:»
  • Двигатель: CDB, Binary: C:\Program Files\Средства отладки для Windows
    (X64)\cdb.exe

Ответ дал

04 дек. 2012, в 14:35
Поделиться

2

В зависимости от версии Visual Studio, которую вы установили, вы можете найти CDB.exe в разных местах. Проверьте, доступен ли он в вашей системе, выполнив поиск на диске C: \.

В моем случае я установил Windows 7 (x64) с Visual Studio 2012 Express и Visual Studio 2013, и мне пришлось установить Microsoft Windows SDK для Windows 7 здесь, чтобы иметь CDB.exe в моей системе. После установки QT Creator смог обнаружить CDB.exe в этом месте: C:\Program Files\Debugging Tools для Windows (x64)\cdb.exe.

Единственное, что вам нужно от SDK, это Common Utilities | Инструменты отладки для Windows.

Ответ дал

24 март 2014, в 08:31
Поделиться

2

Я пытаюсь, сначала установите Visual Studio 2010,
После этого в помещается: или загружает только этот файл!..

Это решение!!!
В Windows 8 64 бит!

Ответ дал

26 окт. 2013, в 03:57
Поделиться

1

Похоже на то, что я встречал на OSX с помощью gdb. Если это так, решение для меня было (внутри Qt Creator):

  • Инструменты
  • Параметры…
  • Сборка и запуск
  • Версии Qt
  • Выберите соответствующую версию
  • Разверните панель «Сведения»
  • Нажмите кнопку «Создать», которая встроена в «Помощник GDB».

В вашем случае текст, вероятно, будет другим (вместо CDB вместо GDB), но могут применяться те же самые шаги.

Ответ дал

02 апр. 2012, в 14:12
Поделиться

  • Установите Windows sdk для соответствующих окон
  • Правильно настройте dll dll/debug для любых внешних библиотек

Ответ дал

07 май 2017, в 16:18
Поделиться

Ещё вопросы

  • 509Как мне достичь теоретического максимума 4 FLOP за цикл?
  • 505Как определить потребление ресурсов процессора и памяти внутри процесса?
  • 431Что такое ошибка сегментации?
  • 451Разница между статическими и общими библиотеками?
  • 375Где я могу найти текущие стандартные документы C или C ++?
  • 237Что означает {0} при инициализации объекта?
  • 232Конвертировать char в int в C и C ++
  • 196Есть ли эквивалент Java или методология для ключевого слова typedef в C ++?
  • 177Что такое базовый указатель и указатель стека? На что они указывают?
  • 158Является ли встроенный язык ассемблера медленнее, чем собственный код C ++?

Work algorithm

  1. Create an

    QThread

    object and the

    ExampleObject

    class object;

  2. Connect the signal

    QThread::started()

    method to

    ExampleObject::run()

    ;

  3. Connect the signal

    ExampleObject::finished()

    to slot

    QThread::terminate()

    , so that on completion of useful work to complete the flow;

  4. Set m_running variable to true, to allow the work cycle, or else this method once completed;
  5. Run stream using the method

    start()

    ;

  6. When it is necessary to complete useful work object, set the variable in m_running to false. Running

    run()

    method and the flux in which he lives the object will be completed automatically and correctly.

Знакомство с Qt Creator

Что же такое этот Qt Creator? Для тех кто не вкурсе, это среда IDE для разработки кроссплатформенных Qt-приложений. Хотя некоторые программисты и используют её для разработки чистого С/C++ кода, такая практика мне не кажется вполне удачной, потому как существуют и более легковесные решения для разработки среди IDE например такие как Geany и Atom, которые к счастью тоже имеют возможность интеграции с компиляторами, средствами отладки и системой контроля версий.

При запуске Qt Creator дружелюбно предложит рассказать вам о его возможностях. Советую не пропускать этот шаг, если вы пользуетесь им впервые.

Примеры Qt-приложений для Android

Чтож, а теперь настала пора нам запустить какой-нибудь из примеров. Сперва выберем нашу архитектуру из списка

Обратите внимание на выпадающий список над первым примером

Итак, если вы планируете запустить код на вашем Android-устройстве, то вероятно вам нужно выбрать архитектуру armeabi-v7a (она же ARMv7). Если же у вас нет своего устройства, то это не беда, потому как вы можете воспользоваться возможностями эмулятора Android, который по умолчанию имеет архитектуру x86. (Во втором случае оставляем всё как есть.) Подробнее вопросов эмуляции Android-устройств мы коснёмся в следующей статье, так как это совершенно отдельная и большая тема со множеством нюансов, о которых нужно рассказать.

Отлично. Теперь просто кликнем на названии проекта Android Application.

Вы также можете найти этот пример введя его название в строку поиска сверху. Более того вам не обязательно выбирать именно этот пример, вы можете запустить любой другой! Потому как все примеры представленные в списке могут быть скомпилированы для указанной архитектуры Android. В этом сила и прелесть Qt!

Окно справки

Перед нами открылось окно справки. Если вы хотите подробно изучить этот пример, то вы можете воспользоваться справочной информацией. Для каждого примера из списка Qt предоставляет подробное описание. Правда описание  представлено только на английском языке, поэтому всем кто плохо знает английский советую всеми способами устранить этот недостаток, потому как по настоящему серьёзная и актуальная информация в сфере программирования пишется как правило на английском. А так это весьма полезная функция, особенно когда имеешь дело с Qt впервые. Мы закрываем справочное окно и переходим к настройке проекта.

Настройка проекта приложения

Qt говорит нам, что он не был полностью сконфигурирован. Нажимаем кнопку Подробнее -> Настроить.

Теперь Qt Creator показывает причину, почему мы не можем сконфигурировать проект.

Параметры Qt Creator

Для того, чтобы это сделать, нужно установить Java Development Kit (JDK), Android Software Development Kit (SDK) и Native Development Kit (NDK) пакеты. Это можно сделать самостоятельно, если вы знаете как это сделать вручную, либо можно воспользоваться удобной подсказкой, которую предоставляет сама среда, что мы и сделаем

Обратите внимание на кнопки загрузки справа (см. скриншот выше, курсор указывает именно на данный вид кнопки)

Эти кнопки выведут нас на странички загрузки каждого из пакетов.

Нам нужно будет возвращаться к окну Параметры после установки каждой из компонент для того, чтобы настроить пути к каждой компоненте вручную, поэтому я советую не закрывать его.  Чтобы открыть его снова, вам придётся найти пункт главного меню Инструменты -> Параметры, и кликнуть на элемент Устройства в списке слева, а затем на правой панели открыть вкладку Android.

Ссылка на основную публикацию