Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Обработка событий 
V
    Опции темы
kirufka
Дата 2.2.2009, 02:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Извиняюсь за сттоль глупый вопрос, но в мануалах написано не отчетливо, а книгу прочесть некогда.
На форме 3 обьекта pb-кнопка le-line edit lb-lable. Всё это в dialog.ui лежит, тоесть при компиляции получаю файл ui_dialog.h
Каким образом мне всетаки при нажатии pb текстом lb сделать содержимое le smile 
ui подключаю вот так:
Код

#include <QApplication>
#include <QDialog>
#include <QPushButton>

#include "ui_dialog.h"

int main(int argc, char *argv[]) {
    QApplication app(argc, argv);
    Ui::Dialog ui;
    QDialog *dialog = new QDialog;
    ui.setupUi(dialog);
    dialog->show();
    return app.exec();
}
  smile 
PM MAIL Jabber   Вверх
just_geek
Дата 2.2.2009, 03:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Код

class myDialog : public QDialog, Ui::Dialog
{
Q_OBJECT
public:
    myDialog(QWidget *parent = 0) : QDialog(parent)
    {
        setupUi(this);
        connect(pb, SIGNAL(clicked()), this, SLOT(addText()));
    }
public slots:
    void addText()
    {
        lb->setText(le->text());
    }
};

myDialog my;
my.show();


как то так...

Это сообщение отредактировал(а) just_geek - 2.2.2009, 03:11
PM MAIL   Вверх
kirufka
Дата 2.2.2009, 21:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Мммм что то у меня всё не получается щас буду сидеть дальше париться smile 
Вот что получилось, может где не правильно:?
Код

#include <QApplication>
#include <QDialog>

#include "ui_dialog.h"

class Dialog : public QDialog, Ui::Dialog
{
Q_OBJECT
public:
    Dialog(QWidget *parent = 0) : QDialog(parent)
    {
        setupUi(this);
        connect(pb, SIGNAL(clicked()), this, SLOT(addText()));
    }
public slots:
    void addText()
    {
        lb->setText(le->text());
    }
};

int main(){
     Dialog my;
     my.show();
}

вот что пишет:
Код

subjc.o: In function `main':
subjc.cpp:(.text+0x40): undefined reference to `vtable for Dialog'
subjc.cpp:(.text+0x47): undefined reference to `vtable for Dialog'
subjc.cpp:(.text+0x92): undefined reference to `vtable for Dialog'
subjc.cpp:(.text+0x99): undefined reference to `vtable for Dialog'
subjc.cpp:(.text+0xce): undefined reference to `vtable for Dialog'
subjc.o:subjc.cpp:(.text+0xd5): more undefined references to `vtable for Dialog' follow
collect2: выполнение ld завершилось с кодом возврата 1


Это сообщение отредактировал(а) kirufka - 2.2.2009, 21:48
PM MAIL Jabber   Вверх
pan2004
Дата 2.2.2009, 21:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



kirufka, в main() забыл объявить QApplication и вызвать exec().

Добавлено через 1 минуту и 13 секунд
вообще ошибки как будто отсутствует определение какой-то виртуальной функции...
Как компилируешь и собираешь, собственно?


--------------------
Qt4/C++ fan
WinXP SP3: MSVC++2005 Qt4.5.1 Boost1.39
сыграем в дурака?
PM MAIL   Вверх
SABROG
Дата 2.2.2009, 22:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Hacker
****


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

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



Что-то путаница какая-то. Наследуемся от Ui::Dialog, при этом класс обзываем Dialog... Может хотябы myDialog его сделать? Я точно не уверен, но не спутает ли компилятор конструктор Dialog с базовым конструктором Dialog, который уже без явного namespace используется в родительском классе?


--------------------
Национальная группа Russian Federation на QtCentre.
PM MAIL   Вверх
kirufka
Дата 2.2.2009, 22:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Нет тоже самое пишет. СЕйчас выложу всё....
Dialog.ui не крепится вот здесь есть http://www.sharemania.ru/0159700
Вот subjc.cpp
Код

#include <QApplication>
#include <QDialog>
#include <QPushButton>

#include "ui_dialog.h"

class myDialog : public QDialog, Ui::Dialog
{
Q_OBJECT
public:
    myDialog(QWidget *parent = 0) : QDialog(parent)
    {
        setupUi(this);
        connect(pb, SIGNAL(clicked()), this, SLOT(addText()));
    }
public slots:
    void addText()
    {
        lb->setText(le->text());
    }
};

int main() {
     myDialog my;
     my.show();
}

Компилирую так:
Код

qmake -project
qmake
make

Вот процесс:
Код

[chak@myhost subjc]$ qmake -project
[chak@myhost subjc]$ qmake
[chak@myhost subjc]$ make
g++ -Wl,-rpath,/usr/lib -o subjc subjc.o    -L/usr/lib -lQtGui -L/usr/lib -L/usr/X11R6/lib -pthread -lpng -lSM -lICE -pthread -pthread -lXi -lXrender -lXrandr -lXfixes -lXcursor -lXinerama -lfreetype -lfontconfig -lXext -lX11 -lQtCore -lz -lm -pthread -lgthread-2.0 -lrt -lglib-2.0 -ldl -lpthread
subjc.o: In function `main':
subjc.cpp:(.text+0x40): undefined reference to `vtable for myDialog'
subjc.cpp:(.text+0x47): undefined reference to `vtable for myDialog'
subjc.cpp:(.text+0x92): undefined reference to `vtable for myDialog'
subjc.cpp:(.text+0x99): undefined reference to `vtable for myDialog'
subjc.cpp:(.text+0xce): undefined reference to `vtable for myDialog'
subjc.o:subjc.cpp:(.text+0xd5): more undefined references to `vtable for myDialog' follow
collect2: выполнение ld завершилось с кодом возврата 1
make: *** [subjc] Ошибка 1


Это сообщение отредактировал(а) kirufka - 2.2.2009, 22:29
PM MAIL Jabber   Вверх
pan2004
Дата 2.2.2009, 22:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(kirufka @  2.2.2009,  22:27 Найти цитируемый пост)
g++ -Wl,-rpath,/usr/lib -o subjc subjc.o 

проблема судя по всему здесь, Q_OBJECT создает несколько виртуальных функций в классе, которые должны обрабатываться moc ом и потом должен получаться из них отдельный cpp и потом .o файл, подключения которого и не видно. Я уже сталкивался с таким поведением на линуксе, бага судя по всему в qmake. 
Что можно посоветовать... хз, попробуй вынести свой класс в отдельные файлы, разделив на .h и .cpp. Убери все остальные файлы, включая .pro, и сгенерируй все по новой.


--------------------
Qt4/C++ fan
WinXP SP3: MSVC++2005 Qt4.5.1 Boost1.39
сыграем в дурака?
PM MAIL   Вверх
kirufka
Дата 2.2.2009, 23:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Ладно завтра буду думать что ещё тут можно замутить... Попробую как вы говорите. Я то думал что во всём виновата глобальная кривота моих рук smile PS вопрос ещё открыт, кто может помочь по последнему посту пишите....
PM MAIL Jabber   Вверх
SABROG
Дата 2.2.2009, 23:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Hacker
****


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

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



Цитата(pan2004 @ 2.2.2009,  22:47)
Цитата(kirufka @  2.2.2009,  22:27 Найти цитируемый пост)
g++ -Wl,-rpath,/usr/lib -o subjc subjc.o 

проблема судя по всему здесь, Q_OBJECT создает несколько виртуальных функций в классе, которые должны обрабатываться moc ом и потом должен получаться из них отдельный cpp и потом .o файл, подключения которого и не видно. Я уже сталкивался с таким поведением на линуксе, бага судя по всему в qmake. 
Что можно посоветовать... хз, попробуй вынести свой класс в отдельные файлы, разделив на .h и .cpp. Убери все остальные файлы, включая .pro, и сгенерируй все по новой.

Как раз поэтому существует техника, которая позволяет сначала запустить генератор .moc файла, прежде чем начать компиляцию. Что стоит сделать сейчас:
  • добавить эту строку в самый конец main.cpp
    Код

    #include "main.moc"
  • make clean
  • make release


Если ошибка останется, то: 
  • make clean
  • qmake
  • make release



--------------------
Национальная группа Russian Federation на QtCentre.
PM MAIL   Вверх
just_geek
Дата 3.2.2009, 05:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



ну если используешь сигналы/слоты, то объявление класса ОБЯЗАТЕЛЬНо должно быть в .h файле, а имплементация в .cpp Иначе moc не будет генерировать файлик.
PM MAIL   Вверх
kuzulis
Дата 3.2.2009, 08:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



just_geek прав, нужно вынести отдельно объявление и реализацию Dialog

т.е или разбить на 2 файла *.h и *.cpp или просто все в *.h написать (если методы простые и их мало) smile
PM MAIL   Вверх
SABROG
Дата 3.2.2009, 09:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Hacker
****


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

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



Цитата(just_geek @  3.2.2009,  05:45 Найти цитируемый пост)
то объявление класса ОБЯЗАТЕЛЬНо должно быть в .h файле

Не обязательно, читай мой пост выше.


--------------------
Национальная группа Russian Federation на QtCentre.
PM MAIL   Вверх
kuzulis
Дата 3.2.2009, 09:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Цитата

добавить эту строку в самый конец main.cpp
Выделить всёкод C++
1:
    
#include "main.moc"


а нахрена? smile
PM MAIL   Вверх
SABROG
Дата 3.2.2009, 09:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Hacker
****


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

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



Цитата(kuzulis @ 3.2.2009,  09:19)
Цитата

добавить эту строку в самый конец main.cpp
Выделить всёкод C++
1:
    
#include "main.moc"


а нахрена? smile
  • Компактно
  • Меньше ручной работы
  • Для мелких программ самое то



--------------------
Национальная группа Russian Federation на QtCentre.
PM MAIL   Вверх
just_geek
Дата 3.2.2009, 11:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



SABROG
хм, не знал smile Пропустил кое-чего в документации.
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С/С++: Кроссплатформенное программирование, QT/Gtk+/wxWidgets"
JackYF
Любитель
  • В заголовке темы в квадратных скобках обозначьте используемую вами библиотеку, например: [QT],[GTK],[wx].
  • Если вопрос актуален только для некоторой версии библиотеки, либо, если вы пользуетесь не самой последней версией, укажите это. Например: [QT4], [GTK2].
  • Все начинающие изучать Qt - не забудьте зайти сюда.
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • В вопросе укажите полную версию версию библиотеки, а также все дополнительные используемые программные пакеты.
  • Не забывайте пользоваться кнопкой "Код".
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к тематике этого раздела. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

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

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


 




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


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

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