Russian Qt Forum
Ноябрь 23, 2024, 12:22
Добро пожаловать,
Гость
. Пожалуйста,
войдите
или
зарегистрируйтесь
.
Вам не пришло
письмо с кодом активации?
1 час
1 день
1 неделя
1 месяц
Навсегда
Войти
Начало
Форум
WIKI (Вики)
FAQ
Помощь
Поиск
Войти
Регистрация
Russian Qt Forum
>
Forum
>
Qt
>
Установка, сборка, отладка, тестирование
>
Соединение сигнала с сокетом.
Страниц: [
1
]
2
Вниз
« предыдущая тема
следующая тема »
Печать
Автор
Тема: Соединение сигнала с сокетом. (Прочитано 17470 раз)
RocketMan
Гость
Соединение сигнала с сокетом.
«
:
Июнь 30, 2007, 12:00 »
Проблема заключается в следующем:
#ifndef GOTOCELLDIALOG_H
#define GOTOCELLDIALOG_H
#include <QDialog.h>
#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
#include <QtCore/QVariant>
#include <QtGui/QAction>
#include <QtGui/QApplication>
#include <QtGui/QButtonGroup>
#include <QtGui/QDialog>
#include <QtGui/QHBoxLayout>
#include <QtGui/QLabel>
#include <QtGui/QLineEdit>
#include <QtGui/QPushButton>
#include <QtGui/QSpacerItem>
#include <QtGui/QVBoxLayout>
#include <QtGui/QWidget>
#include <QtGui/QRegExpValidator>
#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()));
connect(lineEdit, SIGNAL(textChanged(const QString &)),this, SLOT(on_lineEdit_textChanged()));
}
void GoToCellDialog::on_lineEdit_textChanged()
{
okButton->setEnabled(lineEdit->hasAcceptableInput());
}
//программа из C.plus.plus.GUI.Programming.with.Qt.4
в таком виде не линкуется
без Q_OBJECT (т.е. если закомментировать) линкуется, но connect(lineEdit, SIGNAL(textChanged(const QString &)),this, SLOT(on_lineEdit_textChanged())) не работает
Использовал qt 4.1.4 и code::blocks 1.0
Записан
Alex Forth
Гость
Соединение сигнала с сокетом.
«
Ответ #1 :
Июнь 30, 2007, 12:40 »
Все телепаты в отпуске. Приведи вывод линкера.
Записан
vaprele07
Гость
Соединение сигнала с сокетом.
«
Ответ #2 :
Июнь 30, 2007, 12:48 »
не генерируется moc_gotocelldialog.cpp возможно нет правил для его сборки, как ты Makefile с генерировал?
Записан
RocketMan
Гость
Соединение сигнала с сокетом.
«
Ответ #3 :
Июнь 30, 2007, 13:30 »
Project : QT Application
Compiler : GNU GCC Compiler (called directly)
Directory : D:\_Programming\QT\GC\
--------------------------------------------------------------------------------
Switching to target: default
Compiling: main.cpp
Compiling: gotocelldialog.cpp
Linking executable: D:\_Programming\QT\GC\QTapp.exe
.objs\gotocelldialog.o:gotocelldialog.cpp:(.text+0x180): undefined reference to `vtable for GoToCellDialog'
.objs\gotocelldialog.o:gotocelldialog.cpp:(.text+0x18c): undefined reference to `vtable for GoToCellDialog'
.objs\gotocelldialog.o:gotocelldialog.cpp:(.text+0x470): undefined reference to `vtable for GoToCellDialog'
.objs\gotocelldialog.o:gotocelldialog.cpp:(.text+0x47c): undefined reference to `vtable for GoToCellDialog'
collect2: ld returned 1 exit status
Process terminated with status 1 (0 minutes, 7 seconds)
Я ничего вручную не генерировал, F9 в code::blocks нажал и все.
На всякий случай: программирую под WinXP.
P.S. Только ногами не пиннайте, я второй день в qt ковыряюсь.
Записан
Alex Forth
Гость
Соединение сигнала с сокетом.
«
Ответ #4 :
Июнь 30, 2007, 13:59 »
1)Q_OBJECT тебе нужен по любому
2) В приведенном выводе не виден список всех обьектных файлов, которые участвуют в сборке. vaprele07 прав - тут обязательно нужен moc_gotocelldialog.cpp. Он генерится автоматом. Проверь, есть ли он у тебя в папке проекта? Участвует ли moc_gotocelldialog.о в линковке?
Записан
RocketMan
Гость
Соединение сигнала с сокетом.
«
Ответ #5 :
Июнь 30, 2007, 14:53 »
Цитата: "Alex Forth"
1)Q_OBJECT тебе нужен по любому
2) В приведенном выводе не виден список всех обьектных файлов, которые участвуют в сборке. vaprele07 прав - тут обязательно нужен moc_gotocelldialog.cpp. Он генерится автоматом. Проверь, есть ли он у тебя в папке проекта? Участвует ли moc_gotocelldialog.о в линковке?
Что такое moc_gotocelldialog.cpp и moc_gotocelldialog.о, для чего они нужны? gotocelldialog.o нашел в папке .objs, ничего больше.
Записан
Alex Forth
Гость
Соединение сигнала с сокетом.
«
Ответ #6 :
Июнь 30, 2007, 14:59 »
Для каждого класса, который является наследником от QObject, Qt с помощю специальной утилитки создает еще один так называемый мета-класс.
Подробнее смотри в асистенте. Там есть Overwiev Meta-Object System
Записан
RocketMan
Гость
Соединение сигнала с сокетом.
«
Ответ #7 :
Июнь 30, 2007, 18:22 »
Проблема в том, что moc_gotocelldialog.о автоматом не генерится.
Если я генерирую его вручную, то результат аналогичен.
Это я нашел собственно в файле:
#error "The header file 'gotocelldialog.h' doesn't include <QObject>."
А можно для меня, ламера, осветить весь процесс сборки подобной программы? А то я без примера это туговато понимаю.
Записан
Alex Forth
Гость
Соединение сигнала с сокетом.
«
Ответ #8 :
Июнь 30, 2007, 18:30 »
Вручную ни moc_gotocelldialog.о ни moc_gotocelldialog.срр генерить не надо!
Если у тебя прописанны все пути то можно быстренько все собрать из командной строки. Деалется это так:
1)В папке с исходниками выполняем qmake -project. Это команда создаст файлик с расширением pro. В нем хранятся все настройки твоего проекта. Можешь его посмотреть и если чего не понравится - подправить.
2)Там же выполняем qmake. Эта команда создаст Makefile
3)mingw32-make запускает процесс сборки.
Записан
RocketMan
Гость
Соединение сигнала с сокетом.
«
Ответ #9 :
Июнь 30, 2007, 19:35 »
Цитата: "Alex Forth"
Вручную ни moc_gotocelldialog.о ни moc_gotocelldialog.срр генерить не надо!
Если у тебя прописанны все пути то можно быстренько все собрать из командной строки. Деалется это так:
1)В папке с исходниками выполняем qmake -project. Это команда создаст файлик с расширением pro. В нем хранятся все настройки твоего проекта. Можешь его посмотреть и если чего не понравится - подправить.
2)Там же выполняем qmake. Эта команда создаст Makefile
3)mingw32-make запускает процесс сборки.
mingw32-make ничего не делает.
Вот вывод:
D:\_Programming\QT\GC>mingw32-make.exe
mingw32-make.exe: *** No rule to make target `..\..\..=ProgrammingQt=\Qt\4.1.4\m
kspecs\win32-g++\qmake.conf', needed by `makefile'. Stop.
D:\_Programming\QT\GC>pause
Для продолжения нажмите любую клавишу . . .
Записан
Alex Forth
Гость
Соединение сигнала с сокетом.
«
Ответ #10 :
Июнь 30, 2007, 19:44 »
Давай по порядку.
После выполнения пунктов 1 и 2 в рабочем каталоге присутствуют файлы *.pro, Makefile, Makefile.Release, Makefile.Debug ?
Записан
Klaustrofob
Гость
Соединение сигнала с сокетом.
«
Ответ #11 :
Июнь 30, 2007, 19:45 »
У меня такую шнягу пишет, если в названии папки с проектом есть пробелы.
Записан
Mikhail
Программист
Offline
Сообщений: 587
Соединение сигнала с сокетом.
«
Ответ #12 :
Июнь 30, 2007, 19:53 »
Цитировать
connect(lineEdit, SIGNAL(textChanged(const QString &)),this, SLOT(on_lineEdit_textChanged()));
Этот коннест вообще не нужен, так как у тебя есть слот по имени on_lineEdit_textChanged(), только желательно все же on_lineEdit_textChanged(const QString &).
Почему не показан файл проекта, скорее всего в твоем проекте отсутствует
FORMS += gotocelldialog.ui
Записан
RocketMan
Гость
Соединение сигнала с сокетом.
«
Ответ #13 :
Июнь 30, 2007, 20:19 »
2 Alex Forth
Да.
2 Klaustrofob
Возможно, только не пробелы, а другие запрещенные символы
2 Mikhail
Чет не понял, а при каком сигнале будет вызываться данный слот как тогда определить, если не connect?
Записан
Alex Forth
Гость
Соединение сигнала с сокетом.
«
Ответ #14 :
Июнь 30, 2007, 20:26 »
Цитата: "RocketMan"
2 Alex Forth
Да.
Вот и гут
Теперь посмотри в Makefile, как прописан путь к qmake.conf и сравни с реальным путем к этому файлу. У меня, например, в Makefile написанно так: d:\LIB\qt-4.2.2\mkspecs\win32-g++\qmake.conf
Записан
Страниц: [
1
]
2
Вверх
Печать
« предыдущая тема
следующая тема »
Перейти в:
Пожалуйста, выберите назначение:
-----------------------------
Qt
-----------------------------
=> Вопросы новичков
=> Уроки и статьи
=> Установка, сборка, отладка, тестирование
=> Общие вопросы
=> Пользовательский интерфейс (GUI)
=> Qt Quick
=> Model-View (MV)
=> Базы данных
=> Работа с сетью
=> Многопоточное программирование, процессы
=> Мультимедиа
=> 2D и 3D графика
=> OpenGL
=> Печать
=> Интернационализация, локализация
=> QSS
=> XML
=> Qt Script, QtWebKit
=> ActiveX
=> Qt Embedded
=> Дополнительные компоненты
=> Кладовая готовых решений
=> Вклад сообщества в Qt
=> Qt-инструментарий
-----------------------------
Программирование
-----------------------------
=> Общий
=> С/C++
=> Python
=> Алгоритмы
=> Базы данных
=> Разработка игр
-----------------------------
Компиляторы и платформы
-----------------------------
=> Linux
=> Windows
=> Mac OS X
=> Компиляторы
===> Visual C++
-----------------------------
Разное
-----------------------------
=> Новости
===> Новости Qt сообщества
===> Новости IT сферы
=> Говорилка
=> Юмор
=> Объявления
Загружается...