Скачал книгу , начал по ней всё делать и сразу столкнулся с проблемой
ffldove@ffllinux:~/qt$ qmake-qt4 -project
ffldove@ffllinux:~/qt$ qmake-qt4 qt.pro
ffldove@ffllinux:~/qt$ make
g++ -c -pipe -fpermissive -g -Wall -W -D_REENTRANT -DQT_SHARED -DQT_GUI_LIB -DQT_CORE_LIB -I/usr/share/qt4/mkspecs/linux-g++ -I. -I/usr/include/qt4/QtCore -I/usr/include/qt4/QtCore -I/usr/include/qt4/QtGui -I/usr/include/qt4/QtGui -I/usr/include/qt4 -I. -I. -I. -o qt.o qt.cpp
qt.cpp: In function ‘int main(int, char**)’:
qt.cpp:7: ошибка: нет декларации ‘Label’ в этой области видимости
qt.cpp:6: предупреждение: unused variable ‘label’
make: *** [qt.o] Ошибка 1
и ппримерно то же самое если использовать не qmake-qt4 а просто qmake
проблемы с qt
Модератор: Модераторы разделов
-
ffldove
- Сообщения: 480
- Статус: Keep It Simple, Stupid
- ОС: RFRemix 14
проблемы с qt
I learned something today
-
mikluxo
- Сообщения: 283
- ОС: Slackware 12.2
Re: проблемы с qt
#include <QLabel>
QLabel а не Label.
QLabel а не Label.
Ich weiss, dass ich nichts weiss, aber wissen Sie es auch?
Завистники на что не взглянут,
подымут вечно лай,
А ты себе своей дорогою ступай,
Полают, да отстанут. Крылов
Завистники на что не взглянут,
подымут вечно лай,
А ты себе своей дорогою ступай,
Полают, да отстанут. Крылов
-
Александр
- Сообщения: 945
- Статус: Пользователь Debian
- ОС: Debian 'Etch'
Re: проблемы с qt
Ну и код увидеть было бы неплохо если проблема не решится.
HP 530 Core2Duo T2400 950GMA 1GB RAM 120 HDD
KDE 3.5.7 kernel 2.6.25 X.org 7.4
KDE 3.5.7 kernel 2.6.25 X.org 7.4
-
ffldove
- Сообщения: 480
- Статус: Keep It Simple, Stupid
- ОС: RFRemix 14
Re: проблемы с qt
код программы
Код: Выделить всё
#include <QApplication>
#include <QLabel>
int main (int argc, char *argv[])
{
QApplication app (argc, argv);
QLabel *label = new QLabel("Hello Qt!");
Label->show();
return app.exec();
}I learned something today
-
mikluxo
- Сообщения: 283
- ОС: Slackware 12.2
Re: проблемы с qt
Надо так:
Обновлено:
Если кому еще надо, написал сию программулину, для выяснения, удаляется label или нет.
Если ее запустить появляется text2.txt->конструктор вызвался.
Но не появляется text.txt следовательно деструктор не вызывался. ЧТД(Что и требовалось доказать)
All bugs reserved
Если main написать так, то деструктор вызывается. ЧТД^2
Код: Выделить всё
#include <QApplication>
#include <QLabel>
int main (int argc, char *argv[])
{
QApplication app (argc, argv);
QLabel *label = new QLabel("Hello Qt!");
label->show(); /*здесь ваша ошибка была*/
return app.exec();
}Обновлено:
Если кому еще надо, написал сию программулину, для выяснения, удаляется label или нет.
Если ее запустить появляется text2.txt->конструктор вызвался.
Но не появляется text.txt следовательно деструктор не вызывался. ЧТД(Что и требовалось доказать)
All bugs reserved
Код: Выделить всё
#include <QApplication>
#include <QWidget>
#include <QLabel>
#include <fstream>
using namespace std;
class MyLabel : public QLabel
{
public:
MyLabel(const QString &str, QWidget *parent=0):QLabel(str, parent)
{
ofstream out("./text2.txt");
out<<"constructor";
}
~MyLabel()
{
ofstream out("./text.txt");
out<<"destructor";
}
};
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
MyLabel *label=new MyLabel("text");
label->show();
return app.exec();
}Если main написать так, то деструктор вызывается. ЧТД^2
Код: Выделить всё
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
MyLabel label("text");
label.show();
return app.exec();
}Ich weiss, dass ich nichts weiss, aber wissen Sie es auch?
Завистники на что не взглянут,
подымут вечно лай,
А ты себе своей дорогою ступай,
Полают, да отстанут. Крылов
Завистники на что не взглянут,
подымут вечно лай,
А ты себе своей дорогою ступай,
Полают, да отстанут. Крылов
-
ffldove
- Сообщения: 480
- Статус: Keep It Simple, Stupid
- ОС: RFRemix 14
Re: проблемы с qt
Спасибо, совсем из головы велетело что с++ к регистру чувствителен
I learned something today
-
deninok
- Сообщения: 585
- Статус: Программист С++
- ОС: Debian GNU/Linux
Re: проблемы с qt
to ffldove
Ещё вам совет, как начинающему.
В коде данного примера
есть проблема, связанная с динамической памятью. Объект класса QLabel, как видите, создаётся в куче, но не освобождается.
Да, авторы книги говорят, что в этом примере данная проблема намеренно опущена для простоты (ну, чтобы не отвлекать новичка от сути примера). Однако к таким вот допущениями легко привыкнуть. Поэтому будьте внимательны к освобождению ресурсов.
Ещё вам совет, как начинающему.
В коде данного примера
Код: Выделить всё
#include <QApplication>
#include <QLabel>
int main (int argc, char *argv[])
{
QApplication app (argc, argv);
QLabel *label = new QLabel("Hello Qt!");
label->show();
return app.exec();
}есть проблема, связанная с динамической памятью. Объект класса QLabel, как видите, создаётся в куче, но не освобождается.
Да, авторы книги говорят, что в этом примере данная проблема намеренно опущена для простоты (ну, чтобы не отвлекать новичка от сути примера). Однако к таким вот допущениями легко привыкнуть. Поэтому будьте внимательны к освобождению ресурсов.
-
Corsair
- Сообщения: 842
- Статус: Местный "тролль"
- ОС: Fedora
Re: проблемы с qt
Вроде бы QObject при удалении убивает всех своих потомков. Однако готов выслушать альтернативные мнения, меня тоже эта тема интересует.
Жестокий стоячий админ (с) коллега
-
whirlwind
- Сообщения: 67
Re: проблемы с qt
QWidget убивает все дочерние виджеты, да, Но в данном случае parent не указывается, потому что это окно.
Здесь назначили frame в качестве parent'та для label , поэтому деструктор label будет вызван, когда выполнится delete frame;
Но, если показать label сам по себе, вот так:
деструктор не будет вызван
Код: Выделить всё
#include <QApplication>
#include <QLabel>
#include <QFrame>
#include <QDebug>
class MyLabel: public QLabel
{
public:
MyLabel(const QString & text, QWidget * parent =0) : QLabel(text, parent) {};
~MyLabel() { qDebug("destruction\n");};
};
int main (int argc, char *argv[])
{
QApplication app (argc, argv);
QFrame* frame = new QFrame;
MyLabel *label = new MyLabel("Hello Qt!", frame);
frame->show();
int ti = app.exec();
delete frame;
return ti;
}Но, если показать label сам по себе, вот так:
Код: Выделить всё
int main (int argc, char *argv[])
{
QApplication app (argc, argv);
MyLabel *label = new MyLabel("Hello Qt!");
int ti = app.exec();
return ti;
}Добро всегда побеждает зло. Мы победили, значит мы - добро.
-
Nikky
- Сообщения: 339
- ОС: Debian GNU/Linux
Re: проблемы с qt
В последнем случае родителем label будет app (экземпляр класса QApplication). При закрытии приложения уничтожатся все принадлежащие ему объекты.
Арфы нет - возьмите бубен...
-
whirlwind
- Сообщения: 67
Re: проблемы с qt
почему? родитель -- то, что явно передается в конструкторе.
Добро всегда побеждает зло. Мы победили, значит мы - добро.