Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Qt и кроссплатформенное программирование С/С++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 06.07.2015, 11:05   #1
chipside
Форумчанин
 
Регистрация: 03.08.2013
Сообщений: 208
По умолчанию Помогите правильно настроить переменные окружения

Linux
GCC (g++)
Установил сразу несколько версий qt (3, 4, 5).
Теперь испытываю трудности с компиляцией примеров:
https://code-live.ru/post/getting-started-qt/
Для первого листинга я использовал скрипт
Код:
#!/bin/bash

# 1. Создать файл проекта.
qmake-qt5 -project

# 2. Создать Makefile
qmake-qt5

# 3. Добавить после 7-ой строки строку
#    QT += widgets
 sed -e '7 a QT += widgets' *.pro > 1.tmp
 cat 1.tmp > *.pro
 rm -Rf 1.tmp
# Источник: http://linuxgeeks.ru/sed.htm

# 4. Собрать проект.
make
Это добавило в *.pro-файл строку QT += widgets
Первый листинг собрался в программу.

===
Что делать с уже вторым не знаю?
Ошибки:
Цитата:
$ source ./CompileAndBuildProject.bash
/bin/qmake-qt5 -o Makefile 2.\ Добавляем\ кнопки\ ввода.pro
g++ -c -pipe -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -m64 -mtune=generic -O2 -Wall -W -D_REENTRANT -fPIC -DQT_NO_DEBUG -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_CORE_LIB -I. -I. -isystem /usr/include/qt5 -isystem /usr/include/qt5/QtWidgets -isystem /usr/include/qt5/QtGui -isystem /usr/include/qt5/QtCore -I. -I/usr/lib64/qt5/mkspecs/linux-g++ -o main.o main.cpp
main.cpp: В функции «int main(int, char**)»:
main.cpp:5:22: ошибка: переменная «QApplication app» инициализирована, хотя имеет неполный тип
QApplication app(argc, argv);
^
main.cpp:7:5: ошибка: нет декларации «QTextEdit» в этой области видимости
QTextEdit textEdit;
^
main.cpp:8:5: ошибка: нет декларации «QPushButton» в этой области видимости
QPushButton quitButton("Quit");
^
main.cpp:10:32: ошибка: нет декларации «quitButton» в этой области видимости
/* 10 */ QObject::connect(&quitButton, SIGNAL(clicked()), qApp, SLOT(quit()));
^
main.cpp:12:14: ошибка: нет декларации «QVBoxLayout» в этой области видимости
/* 12 */ QVBoxLayout layout;
^
main.cpp:13:14: ошибка: нет декларации «layout» в этой области видимости
/* 13 */ layout.addWidget(&textEdit);
^
main.cpp:13:32: ошибка: нет декларации «textEdit» в этой области видимости
/* 13 */ layout.addWidget(&textEdit);
^
main.cpp:16:13: ошибка: агрегатный тип «QWidget window» неполон и не может быть определён
QWidget window;
^
Makefile:309: ошибка выполнения рецепта для цели «main.o»
make: *** [main.o] Ошибка 1

Пробовал в *.pro-файл добавлять
QT += gui
QT += core
Не помогло.

Что и как надо настроить?

Последний раз редактировалось Stilet; 06.07.2015 в 13:56.
chipside вне форума Ответить с цитированием
Старый 06.07.2015, 11:33   #2
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,330
По умолчанию

Покажите main.cpp - похоже у вас там нет нужных #include директив.
waleri вне форума Ответить с цитированием
Старый 06.07.2015, 11:43   #3
chipside
Форумчанин
 
Регистрация: 03.08.2013
Сообщений: 208
По умолчанию

main.cpp

Код:
#include <QtGui>

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

    QTextEdit textEdit;
    QPushButton quitButton("Quit");

    /* 10 */ QObject::connect(&quitButton, SIGNAL(clicked()), qApp, SLOT(quit()));

    /* 12 */ QVBoxLayout layout;
    /* 13 */ layout.addWidget(&textEdit);
    /* 14 */ layout.addWidget(&quitButton);

    QWidget window;
    /* 17 */ window.setLayout(&layout);

    window.show();

    return app.exec();
}

Вы правы!

Я добавил библиотеки:
Код:
#include <QtGui>
#include <QApplication>
#include <QTextEdit>
#include <QPushButton>
#include <QVBoxLayout>

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

    QTextEdit textEdit;
    QPushButton quitButton("Quit");

    /* 10 */ QObject::connect(&quitButton, SIGNAL(clicked()), qApp, SLOT(quit()));

    /* 12 */ QVBoxLayout layout;
    /* 13 */ layout.addWidget(&textEdit);
    /* 14 */ layout.addWidget(&quitButton);

    QWidget window;
    /* 17 */ window.setLayout(&layout);

    window.show();

    return app.exec();
}

проект собрался.
Только теперь при завершении программы возникает ошибка двойного удаления:
Цитата:
double free or corruption (out): 0x00007ffc0a7254d0 ***
======= Backtrace: =========
/lib64/libc.so.6(+0x77d9e)[0x7f0d1fe0bd9e]
/lib64/libc.so.6(cfree+0x5b5)[0x7f0d1fe179f5]
/lib64/libQt5Widgets.so.5(_ZN7QWidgetD1Ev+ 0x181)[0x7f0d219f0da1]
./2. Добавляем кнопки ввода[0x400f7e]
/lib64/libc.so.6(__libc_start_main+0xf0)[0x7f0d1fdb3fe0]
./2. Добавляем кнопки ввода[0x40105e]
======= Memory map: ========
..........................

Последний раз редактировалось Stilet; 06.07.2015 в 13:59.
chipside вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как настраивать переменные окружения? fredwriter Помощь студентам 2 30.10.2011 22:16
Переменные окружения Я_и Паскаль, Turbo Pascal, PascalABC.NET 3 10.10.2010 11:54
Переменные окружения в C# Blourid Общие вопросы .NET 2 16.07.2010 22:03
PID и переменные среды окружения _Dark_angel_ Общие вопросы C/C++ 0 21.11.2009 18:16