проблемы с qt

Модератор: Модераторы разделов

Аватара пользователя
ffldove
Сообщения: 480
Статус: Keep It Simple, Stupid
ОС: RFRemix 14

проблемы с qt

Сообщение ffldove »

Скачал книгу , начал по ней всё делать и сразу столкнулся с проблемой
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
I learned something today
Спасибо сказали:
mikluxo
Сообщения: 283
ОС: Slackware 12.2

Re: проблемы с qt

Сообщение mikluxo »

#include <QLabel>
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
Спасибо сказали:
Аватара пользователя
ffldove
Сообщения: 480
Статус: Keep It Simple, Stupid
ОС: RFRemix 14

Re: проблемы с qt

Сообщение ffldove »

код программы

Код: Выделить всё

#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

Сообщение mikluxo »

Надо так:

Код: Выделить всё

#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

Сообщение ffldove »

Спасибо, совсем из головы велетело что с++ к регистру чувствителен
I learned something today
Спасибо сказали:
Аватара пользователя
deninok
Сообщения: 585
Статус: Программист С++
ОС: Debian GNU/Linux

Re: проблемы с qt

Сообщение deninok »

to ffldove
Ещё вам совет, как начинающему.
В коде данного примера

Код: Выделить всё

#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

Сообщение Corsair »

Вроде бы QObject при удалении убивает всех своих потомков. Однако готов выслушать альтернативные мнения, меня тоже эта тема интересует.
Жестокий стоячий админ (с) коллега
Спасибо сказали:
Аватара пользователя
whirlwind
Сообщения: 67

Re: проблемы с qt

Сообщение whirlwind »

QWidget убивает все дочерние виджеты, да, Но в данном случае parent не указывается, потому что это окно.

Код: Выделить всё

#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;
}
Здесь назначили frame в качестве parent'та для label , поэтому деструктор label будет вызван, когда выполнится delete frame;

Но, если показать 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

Сообщение Nikky »

В последнем случае родителем label будет app (экземпляр класса QApplication). При закрытии приложения уничтожатся все принадлежащие ему объекты.
Арфы нет - возьмите бубен...
Спасибо сказали:
Аватара пользователя
whirlwind
Сообщения: 67

Re: проблемы с qt

Сообщение whirlwind »

почему? родитель -- то, что явно передается в конструкторе.
Добро всегда побеждает зло. Мы победили, значит мы - добро.
Спасибо сказали: