Купил книжку Ж.Бланшет, М.Саммерфилд "Qt4 программирование GUI на C++". У меня установлена Fedora Core 8. Уже первое же упражнение не захотело компилироваться выдавая ошибку:
main.cpp:1:24: error: QApplication: Нет такого файла или каталога
Сильно удивившись решил взять пару любых примеров с диска к книге и скомпилировать их. Приведу пример одного из них:
файл gotocell.h
#ifndef GOTOCELLDIALOG_H
#define GOTOCELLDIALOG_H
#include <QDialog>
#include "ui_gotocelldialog.h"
class GoToCellDialog : public QDialog, public Ui::GoToCellDialog
{
Q_OBJECT
public:
GoToCellDialog(QWidget *parent = 0);
private slots:
void on_lineEdit_textChanged();
};
#endif
файл gotocell.cpp
#include <QtGui>
#include "gotocelldialog.h"
GoToCellDialog::GoToCellDialog(QWidget *parent)
: QDialog(parent)
{
setupUi(this);
QRegExp regExp("[A-Za-z][1-9][0-9]{0,2}");
lineEdit->setValidator(new QRegExpValidator(regExp, this));
connect(okButton, SIGNAL(clicked()), this, SLOT(accept()));
connect(cancelButton, SIGNAL(clicked()), this, SLOT(reject()));
}
void GoToCellDialog::on_lineEdit_textChanged()
{
okButton->setEnabled(lineEdit->hasAcceptableInput());
}
файл main.cpp
#include <QApplication>
#include "gotocelldialog.h"
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
GoToCellDialog *dialog = new GoToCellDialog;
dialog->show();
return app.exec();
}
команды qmake -project и qmake gotocell.pro сработали без проблем, а вот при сборке - make вылезло такое:
g++ -c -pipe -Wall -W -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --param=ssp-buffer-size=4 -m32 -march=i386 -mtune=generic -fasynchronous-unwind-tables -DQT_NO_DEBUG -DQT_SHARED -DQT_TABLET_SUPPORT -DQT_THREAD_SUPPORT -I/usr/lib/qt-3.3/mkspecs/default -I. -I. -I/usr/lib/qt-3.3/include -o main.o main.cpp
main.cpp:1:24: error: QApplication: Нет такого файла или каталога
In file included from main.cpp:3:
gotocelldialog.h:4:19: error: QDialog: Нет такого файла или каталога
gotocelldialog.h:6:31: error: ui_gotocelldialog.h: Нет такого файла или каталога
gotocelldialog.h:8: ошибка: expected class-name before ‘,’ token
gotocelldialog.h:8: ошибка: ‘Ui’ не был декларирован
gotocelldialog.h:8: ошибка: expected `{' before ‘GoToCellDialog’
gotocelldialog.h:8: ошибка: invalid function declaration
main.cpp: In function ‘int main(int, char**)’:
main.cpp:7: ошибка: нет декларации ‘QApplication’ в этой области видимости
main.cpp:7: ошибка: expected `;' before ‘app’
main.cpp:8: ошибка: invalid use of undefined type ‘class GoToCellDialog’
gotocelldialog.h:8: ошибка: forward declaration of ‘class GoToCellDialog’
main.cpp:9: ошибка: invalid use of undefined type ‘class GoToCellDialog’
gotocelldialog.h:8: ошибка: forward declaration of ‘class GoToCellDialog’
main.cpp:10: ошибка: нет декларации ‘app’ в этой области видимости
main.cpp: At global scope:
main.cpp:5: предупреждение: unused parameter ‘argc’
main.cpp:5: предупреждение: unused parameter ‘argv’
make: *** [main.o] Ошибка 1
Я не могу понять, почему не найден QApplication? В виндовом варианте Qt эта программа благополучно скомпилилась! Правда в Федоре стоит Qt установившийся вместе с дистрибутивом. Более того, судя по пунктам в меню "Разработка" в Главном меню Иксов установлены и Qt3.3 и Qt4. Может это вызывает какой-то конфликт? Третью версию удалить не получается - половина утилит KDE пропадает вместе с нею. К сожалению я не знаю, может нет каких-то переменных окружения, или они неправильно настроены? Вроде документация утверждает что все переменные устанавливаются вместе с Qt! Что надо настроить? Подскажите пожалуйста!