Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [QT4] компилится но не работает 
V
    Опции темы
nanoo
Дата 19.10.2007, 19:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 37
Регистрация: 19.10.2007

Репутация: нет
Всего: нет



Привет всем юниксоидам. Есть такой простенький код
Цитата

#include<qapplication>
#include<qmessagebox>
#include<qpushbutton>

class hw: public QPushButton
{
Q_OBJECT
public:
hw(QWidget *parent);
public slots:
void hello();
};

hw::hw(QWidget *parent=0):QPushButton("hello world")
{
connect(this,SIGNAL(clicked()),SLOT(hello()));
}

void hw::hello()
{
QMessageBox::information(this,"hello world","hello world");
}

int main(int ac, char* av[])
{
QApplication app(ac,av);
hw mw;
mw.show();
return app.exec();
}
#include"main.moc"

суть простая, нажимаешь кнопочку - появляется меседжбокс. Только вот не появляется этот меседжбокс! В чем грабли не пойму. Версия 4.2. 
Заранее спасибо.
PM MAIL   Вверх
nickless
Дата 19.10.2007, 19:38 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Гентозавр
****


Профиль
Группа: Участник Клуба
Сообщений: 2976
Регистрация: 29.8.2005
Где: Germany

Репутация: 13
Всего: 181



У меня появляется (если инклюды написать как положено с большой буквы).
Как и в чем компилируем, что пишет в консоли?


--------------------
user posted image

Real men don't use backups, they post their stuff on a public ftp server and let the rest of the world make copies
- Linus Torvalds
PM MAIL   Вверх
JackYF
Дата 19.10.2007, 19:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


полуавантюрист
****


Профиль
Группа: Участник
Сообщений: 5814
Регистрация: 28.8.2004
Где: страна тысячи озё р

Репутация: 7
Всего: 162



Цитата(nanoo @  19.10.2007,  19:19 Найти цитируемый пост)
connect(this,SIGNAL(clicked()),SLOT(hello()));

connect(this,SIGNAL(clicked()),this,SLOT(hello()));

упс, значит и так можно.

Это сообщение отредактировал(а) JackYF - 19.10.2007, 19:46


--------------------
Пожаловаться на меня как модератора можно здесь.
PM MAIL Jabber   Вверх
nanoo
Дата 19.10.2007, 20:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 37
Регистрация: 19.10.2007

Репутация: нет
Всего: нет



Цитата(nickless @ 19.10.2007,  19:38)
У меня появляется (если инклюды написать как положено с большой буквы).
Как и в чем компилируем, что пишет в консоли?

Компилирую под виндой хр при помощи минжв.  smile 

А зачем большие букавки в инклюдах то? мона и маленькие. Это, кажется, в документации написано. smile 

Что пишет? Ну что обычно компилер пишет? что делает, то и пишет. Это как в анекдоте: небыло у юниксоидов скринсейверов, они и придумали configure+make. Только я програмер такой себе. Занимаюсь кодингом долго уже, но редко. В общем, не ламер. Поэтому сообщения компилера об ошибках различаю. Так вот компилится все на ура. версия qt  4.2

Я вот что думаю, может это в библиотеке баг какой-то... Или это я такой пряморукий....  smile 

===
зы винда у меня, это с новым местом работы связано. Преданый линуксоид два.пять года уже. Начинал с кнопикса, потом сюзи9.1 была, через полгода дебиан3.1 поставил. Теперь в основном убунту юзаю. Поставить времени нету.  smile 

Это сообщение отредактировал(а) nanoo - 19.10.2007, 20:15
PM MAIL   Вверх
nickless
Дата 19.10.2007, 22:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Гентозавр
****


Профиль
Группа: Участник Клуба
Сообщений: 2976
Регистрация: 29.8.2005
Где: Germany

Репутация: 13
Всего: 181



Цитата(nanoo @  19.10.2007,  19:14 Найти цитируемый пост)
А зачем большие букавки в инклюдах то? мона и маленькие. Это, кажется, в документации написано.

Ссылку в студию smile 
Во всех примерах и туториалах Qt использует названия с большими буквами, и файлы так называются, под виндой файловая система case insensitiv, поэтому наверно и работает...

Цитата(nanoo @  19.10.2007,  19:14 Найти цитируемый пост)
Что пишет? Ну что обычно компилер пишет? что делает, то и пишет. 

Вот это и интересно smile 
Я имел ввиду вообще комманду, которой компилируется и линкуется, может там либы не подключена или еще чего, варнинги итд.
И что пишет сама программа при запуске в консоли, желательно скомпилированная со включенным дебагом итд.

Короче дополнительная информация нужна, а с телепатами у нас как то не густо... smile 


--------------------
user posted image

Real men don't use backups, they post their stuff on a public ftp server and let the rest of the world make copies
- Linus Torvalds
PM MAIL   Вверх
archimed7592
Дата 20.10.2007, 11:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Архимед
****


Профиль
Группа: Завсегдатай
Сообщений: 2531
Регистрация: 12.6.2004
Где: Moscow

Репутация: 11
Всего: 93



Цитата(nanoo @  19.10.2007,  19:19 Найти цитируемый пост)
Только вот не появляется этот меседжбокс!

Что возвращает connect?

Уверен, что moc отрабатывает?


Цитата(nanoo @  19.10.2007,  20:14 Найти цитируемый пост)
А зачем большие букавки в инклюдах то? мона и маленькие. Это, кажется, в документации написано. smile 

Либо QHBoxLayout, либо qhboxlayout.h... Маленькими можно только в винде ибо она не чуствительна к регистру в именах сущностей ФС. На линухе такое не скомпилиться.


Цитата(nanoo @  19.10.2007,  20:14 Найти цитируемый пост)
Что пишет? Ну что обычно компилер пишет?

Если ты так уверен, что делаешь всё правильно, что даже не хочешь сообщить нам что именно ты делаешь, то зачем задавать здесь вопросы?


--------------------
If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas.
© George Bernard Shaw
PM Jabber   Вверх
nanoo
Дата 20.10.2007, 12:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 37
Регистрация: 19.10.2007

Репутация: нет
Всего: нет



Скриншот приклеплен.
Насчет дебугера. Я его включать не умею ибо никогда не использовал. Как?
Большие буковки... да с этим согласен, признаю, что не прав.

Добавлено через 7 минут и 4 секунды
Ага. Коннект не срабатывает. У кого какие идеи?

Это сообщение отредактировал(а) nanoo - 20.10.2007, 12:22

Присоединённый файл ( Кол-во скачиваний: 17 )
Присоединённый файл  desktop.JPG 113,93 Kb
PM MAIL   Вверх
archimed7592
Дата 20.10.2007, 12:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Архимед
****


Профиль
Группа: Завсегдатай
Сообщений: 2531
Регистрация: 12.6.2004
Где: Moscow

Репутация: 11
Всего: 93



nanoo, во-первых, измени вот это:
Код
#include <cassert>
// ...
bool connected = connect(this,SIGNAL(clicked()),SLOT(hello()));
assert(connected);

Во-вторых, никогда не делай скриншотов... Неужели сложно написать
mingw32-make > make.log 2>&1
и выложить содержимое make.log?

В-третьих сделай mingw32-make clean и только потом просто mingw32-make - и выложи лог.
И ещё, покажи содержимое своего .pro

Добавлено через 1 минуту и 44 секунды
Цитата
Ага. Коннект не срабатывает. У кого какие идеи?

Ага, идеи в том, что не отрабатывает moc. Зачем изобретаешь велосипеды? Нельзя что ль перенести описание класса в .h? Зачем нужен main.moc? Зачем делать работу за утилиты, которые эту работу должны делать сами?


--------------------
If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas.
© George Bernard Shaw
PM Jabber   Вверх
nanoo
Дата 20.10.2007, 12:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 37
Регистрация: 19.10.2007

Репутация: нет
Всего: нет



Ага. С moc я чето не то сделал. Сгенерил main.moc опять в ручную и заработало.
Всем спасибо.

Это сообщение отредактировал(а) nanoo - 20.10.2007, 12:35
PM MAIL   Вверх
archimed7592
Дата 20.10.2007, 12:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Архимед
****


Профиль
Группа: Завсегдатай
Сообщений: 2531
Регистрация: 12.6.2004
Где: Moscow

Репутация: 11
Всего: 93



Цитата(nanoo @  20.10.2007,  12:32 Найти цитируемый пост)
Ага. С moc я чето не то сделал. Сгенерил main.moc опять в ручную и заработало.

Открой секрет: зачем делать это вручную?


--------------------
If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas.
© George Bernard Shaw
PM Jabber   Вверх
nickless
Дата 20.10.2007, 15:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Гентозавр
****


Профиль
Группа: Участник Клуба
Сообщений: 2976
Регистрация: 29.8.2005
Где: Germany

Репутация: 13
Всего: 181



Я кстати компилировал qmake-ом, он всё автоматически сделал как надо smile 
Код

qmake -project bla && qmake && make 



--------------------
user posted image

Real men don't use backups, they post their stuff on a public ftp server and let the rest of the world make copies
- Linus Torvalds
PM MAIL   Вверх
archimed7592
Дата 20.10.2007, 15:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Архимед
****


Профиль
Группа: Завсегдатай
Сообщений: 2531
Регистрация: 12.6.2004
Где: Moscow

Репутация: 11
Всего: 93



Цитата(nickless @  20.10.2007,  15:32 Найти цитируемый пост)
qmake -project

Не может такого быть - moc не обрабатывает .cpp файлы, пока явно не укажешь.


--------------------
If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas.
© George Bernard Shaw
PM Jabber   Вверх
nickless
Дата 20.10.2007, 15:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Гентозавр
****


Профиль
Группа: Участник Клуба
Сообщений: 2976
Регистрация: 29.8.2005
Где: Germany

Репутация: 13
Всего: 181



Цитата(archimed7592 @  20.10.2007,  14:38 Найти цитируемый пост)
Не может такого быть - moc не обрабатывает .cpp файлы, пока явно не укажешь.

Ну у меня работает smile , возможно новая фича...
Код
% ls
main.cpp

% qmake -project bla && qmake && make
/usr/bin/moc -DQT_GUI_LIB -DQT_CORE_LIB -DQT_SHARED -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. main.cpp -o main.moc
g++ -c -pipe -g -Wall -W -D_REENTRANT -DQT_GUI_LIB -DQT_CORE_LIB -DQT_SHARED -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 main.o main.cpp
main.cpp:14: warning: unused parameter ‘parent’
g++  -o bla main.o    -L/usr/lib/qt4 -lQtGui -L/usr/lib/mysql -L/usr/lib/qt4 -L/usr/lib -lpng -lSM -lICE -pthread -pthread -lXrender -lXrandr -lXfixes -lXcursor -lfreetype -lfontconfig -lXext -lX11 -lQtCore -lz -lm -pthread -lgthread-2.0 -lrt -lglib-2.0 -ldl -lpthread

% ls
bla  bla.pro  main.cpp  main.moc  main.o  Makefile

% qmake -v
QMake version 2.01a
Using Qt version 4.3.2 in /usr/lib/qt4

% moc -v
Qt Meta Object Compiler version 59 (Qt 4.3.2)



--------------------
user posted image

Real men don't use backups, they post their stuff on a public ftp server and let the rest of the world make copies
- Linus Torvalds
PM MAIL   Вверх
nanoo
Дата 21.10.2007, 17:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 37
Регистрация: 19.10.2007

Репутация: нет
Всего: нет



Цитата(archimed7592 @ 20.10.2007,  12:54)
Цитата(nanoo @  20.10.2007,  12:32 Найти цитируемый пост)
Ага. С moc я чето не то сделал. Сгенерил main.moc опять в ручную и заработало.

Открой секрет: зачем делать это вручную?

Да это так... что бы меньше файлов писать. Например напишешь какой-нить class.h и там опять кучку инклюдов. В больших проектах этого лучше не делать.

Кстати, попробывал без moc - да, действительно работает. Но #include"main.moc" в конце все равно должно быть.


Это сообщение отредактировал(а) nanoo - 21.10.2007, 17:26
PM MAIL   Вверх
bsa
Дата 24.10.2007, 11:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 24
Всего: 196



Цитата(nanoo @ 21.10.2007,  17:12)
Да это так... что бы меньше файлов писать. Например напишешь какой-нить class.h и там опять кучку инклюдов. В больших проектах этого лучше не делать.

1. Кучу инклюдов совсем подключать не обязательно. Достаточно в хидере объявить классы, на которые ссылаешься:
Код
#ifndef MYCLASS_H
# define MYCLASS_H
# include <QWidget>

class QLabel;
class QSplitter;
class QPushButton;

class MyClass : public QWidget
{
        Q_OBJECT
        QLabel *label;
        QSplitter *splitter;
        QPushButton *buttonOk;
public:
        MyClass();
        ~MyClass(){}
};
#endif //MYCLASS_H
а в cpp подключить <QtGui>:
Код
#include <QtGui>
#include "MyClass.h"

MyClass::MyClass()
{
        setLayout(new QHBoxLayout);
        layout()->addWidget(splitter = new QSplitter);
        splitter->addWidget(label = new QLabel(tr("test")));
        splitter->addWidget(buttonOk = new QPushButton(tr("&OK")));
}

2. На счет больших проектов ты ошибаешься. В больших проектах надо создавать директории, в которых надо группировать все по смыслу.
PM   Вверх
nanoo
Дата 24.10.2007, 19:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 37
Регистрация: 19.10.2007

Репутация: нет
Всего: нет



Цитата(bsa @ 24.10.2007,  11:25)
Цитата(nanoo @ 21.10.2007,  17:12)
Да это так... что бы меньше файлов писать. Например напишешь какой-нить class.h и там опять кучку инклюдов. В больших проектах этого лучше не делать.

1. Кучу инклюдов совсем подключать не обязательно. Достаточно в хидере объявить классы, на которые ссылаешься:
Код
#ifndef MYCLASS_H
# define MYCLASS_H
# include <QWidget>

class QLabel;
class QSplitter;
class QPushButton;

class MyClass : public QWidget
{
        Q_OBJECT
        QLabel *label;
        QSplitter *splitter;
        QPushButton *buttonOk;
public:
        MyClass();
        ~MyClass(){}
};
#endif //MYCLASS_H
а в cpp подключить <QtGui>:
Код
#include <QtGui>
#include "MyClass.h"

MyClass::MyClass()
{
        setLayout(new QHBoxLayout);
        layout()->addWidget(splitter = new QSplitter);
        splitter->addWidget(label = new QLabel(tr("test")));
        splitter->addWidget(buttonOk = new QPushButton(tr("&OK")));
}

2. На счет больших проектов ты ошибаешься. В больших проектах надо создавать директории, в которых надо группировать все по смыслу.

1. Это имеет значение? Все равно кнопки лишние нажимать  smile . Хотя в доках пишут, что это очень уменьшает время компилаяции проекта. Так что совет, в общем-то правельный  smile  .
2. Это я и имею ввиду. В больших проектах все надо по полочкам. Что-бы все было по местам. Даешь "правила хорошего кода"  smile !

Это сообщение отредактировал(а) nanoo - 24.10.2007, 19:14
PM MAIL   Вверх
Любитель
Дата 24.11.2007, 18:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Программист-романтик
****


Профиль
Группа: Комодератор
Сообщений: 3645
Регистрация: 21.5.2005
Где: Воронеж

Репутация: 16
Всего: 92



Цитата(archimed7592 @  20.10.2007,  11:38 Найти цитируемый пост)
Либо QHBoxLayout, либо qhboxlayout.h

Второе, вроде как, deprecated.

Цитата(nanoo @  24.10.2007,  19:12 Найти цитируемый пост)
 Это имеет значение? Все равно кнопки лишние нажимать

На времени компиляции очень сказывается.



--------------------
PM MAIL ICQ Skype   Вверх
archimed7592
Дата 24.11.2007, 23:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Архимед
****


Профиль
Группа: Завсегдатай
Сообщений: 2531
Регистрация: 12.6.2004
Где: Moscow

Репутация: 11
Всего: 93




M
archimed7592
Сообщения разделены в тему Precompiled headers



--------------------
If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas.
© George Bernard Shaw
PM Jabber   Вверх
Страницы: (2) [Все] 1 2 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С/С++: Кроссплатформенное программирование, QT/Gtk+/wxWidgets"
JackYF
Любитель
  • В заголовке темы в квадратных скобках обозначьте используемую вами библиотеку, например: [QT],[GTK],[wx].
  • Если вопрос актуален только для некоторой версии библиотеки, либо, если вы пользуетесь не самой последней версией, укажите это. Например: [QT4], [GTK2].
  • Все начинающие изучать Qt - не забудьте зайти сюда.
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • В вопросе укажите полную версию версию библиотеки, а также все дополнительные используемые программные пакеты.
  • Не забывайте пользоваться кнопкой "Код".
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к тематике этого раздела. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, Любитель.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets | Следующая тема »


 




[ Время генерации скрипта: 0.1035 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.