Название: Сигналы и слоты: подскажите как подвязать функцию к кнопке..? Отправлено: CProger от Апрель 03, 2010, 15:45 Извиняюсь за очень чайниковский вопрос, но нормального примера по тому как такое простейшее и базовое действие сделать в QT - я не нашёл. Ни в гугле, ни на официальном сайте. Хотя делал по аналогии с офисайтом.
Я хотел вызвать собственную функцию по клику на button2. Почему у меня не работает этот пример? Ошибка такая: Цитировать main.o: In function `MyClass::MyClass()': main.cpp:(.text+0x1e): undefined reference to `vtable for MyClass' main.o: In function `MyClass::MyClass()': main.cpp:(.text+0x3e): undefined reference to `vtable for MyClass' полный код: Код: #include <QApplication> Название: Re: Сигналы и слоты: подскажите как подвязать функцию к кнопке..? Отправлено: lit-uriy от Апрель 03, 2010, 15:48 >>но нормального примера по тому как такое простейшее и базовое действие сделать в QT - я не нашёл.
Не искал! >>&app, SLOT( myClass->MyFunc() ) Ересь. Читай учебное пособие (http://doc.crossplatform.ru/qt/4.5.0/widgets-tutorial.html) Название: Re: Сигналы и слоты: подскажите как подвязать функцию к кнопке..? Отправлено: CProger от Апрель 03, 2010, 15:53 lit-uriy
а где там привязывание к функциям? Там либо на базе собственного компонента, что мне не нужно, либо вообще никак нету) У меня ведь сделано уже то, что вы привели по ссылке. Я читал уже это. Или там и пример с привязыванием где-то приводится? >> Ересь. Может быть вы бы подсказали как написать неересь, а то тоже самое, что и вы - мне компилятор уже сказал. О чём я и написал в первом посте. Название: Re: Сигналы и слоты: подскажите как подвязать функцию к кнопке..? Отправлено: CProger от Апрель 03, 2010, 16:25 Попробовал подправить на:
Код: QObject::connect( button2, SIGNAL( clicked() ), &myClass, SLOT( MyFunc() ) ); Название: Re: Сигналы и слоты: подскажите как подвязать функцию к кнопке..? Отправлено: ieroglif от Апрель 03, 2010, 16:56 при проектировании формы (в дизайнере) кликни правой мышкой по "кнопке" (или тому элементу чей слот тебя интересует) и выбери "Перейти к слоту", там выбери интересующий тебя (например "clicked()") и у тебя автоматом всё создастся и привяжется.
Название: Re: Сигналы и слоты: подскажите как подвязать функцию к кнопке..? Отправлено: SABROG от Апрель 03, 2010, 17:00 Попробовал подправить на: Код: QObject::connect( button2, SIGNAL( clicked() ), &myClass, SLOT( MyFunc() ) ); Тут у тебя уже проблемы со знанием C++. myClass - указатель, а ты берешь адрес указателя &myCLass, вместо того, чтобы передать адрес объекта на который он указывает. Название: Re: Сигналы и слоты: подскажите как подвязать функцию к кнопке..? Отправлено: CProger от Апрель 03, 2010, 17:01 при проектировании формы (в дизайнере) кликни правой мышкой по "кнопке" (или тому элементу чей слот тебя интересует) и выбери "Перейти к слоту", там выбери интересующий тебя (например "clicked()") и у тебя автоматом всё создастся и привяжется. аа.. вон почему таких вопросов не возникает у народа.. :) А я это всё вручную верстаю. Сейчас скачаю, поставлю QT Designer, попробую..Название: Re: Сигналы и слоты: подскажите как подвязать функцию к кнопке..? Отправлено: CProger от Апрель 03, 2010, 17:03 Попробовал подправить на: Код: QObject::connect( button2, SIGNAL( clicked() ), &myClass, SLOT( MyFunc() ) ); Тут у тебя уже проблемы со знанием C++. myClass - указатель, а ты берешь адрес указателя &myCLass, вместо того, чтобы передать адрес объекта на который он указывает. main.o: In function `MyClass::MyClass()': main.cpp:(.text+0x1e): undefined reference to `vtable for MyClass' а я и не понимаю о чём это он :) какая-то vtable.. :) А вручную тут много надо править, чтобы оно подвязалось? Название: Re: Сигналы и слоты: подскажите как подвязать функцию к кнопке..? Отправлено: SABROG от Апрель 03, 2010, 17:08 Вставь в конец исходника:
Код
Затем сделай: Код
Название: Re: Сигналы и слоты: подскажите как подвязать функцию к кнопке..? Отправлено: CProger от Апрель 03, 2010, 17:17 обалдеть.. заработало.. А почему?? :D Удалил ещё раз все файлы, снова скомпилил. Опять скомпилилось успешно.. анбеливебал :D
Спасибо!! Название: Re: Сигналы и слоты: подскажите как подвязать функцию к кнопке..? Отправлено: SABROG от Апрель 03, 2010, 17:36 А почему?? :D Мета-объектный компилятор по умолчанию обрабатывает только файлы заголовков. У тебя класс объявлен в .cpp файле, нужно было сказать moc компилятору, чтобы он его обработал и сгенерил статические данные для того, чтобы работала система сигналов и слотов. Читай документацию. P.S.: "пардонси за сиськи" © Декстер, #include "main.moc" это старый способ, который не рекомендуют использовать, лучше #include "moc_main.cpp" Название: Re: Сигналы и слоты: подскажите как подвязать функцию к кнопке..? Отправлено: CProger от Апрель 04, 2010, 00:08 А почему?? :D Мета-объектный компилятор по умолчанию обрабатывает только файлы заголовков. У тебя класс объявлен в .cpp файле, нужно было сказать moc компилятору, чтобы он его обработал и сгенерил статические данные для того, чтобы работала система сигналов и слотов. Читай документацию. P.S.: "пардонси за сиськи" © Декстер, #include "main.moc" это старый способ, который не рекомендуют использовать, лучше #include "moc_main.cpp" Название: Re: Сигналы и слоты: подскажите как подвязать функцию к кнопке..? Отправлено: CProger от Апрель 04, 2010, 00:10 Но тут проблемка возникает :)
main.cpp:179:25: error: moc_main.cpp: Нет такого файла или каталога QT у меня линуксовый, самой новой версии. добавлено ага, разобрался! данная проблема решается дописыванием: HEADERS += main.cpp в .pro файл и перегенерированием (qmake). Корявое решение конечно.. лучше выносить в .h файл. Ну это далее :) спасибо за помощь! Название: Re: Сигналы и слоты: подскажите как подвязать функцию к кнопке..? Отправлено: SABROG от Апрель 04, 2010, 00:44 Хмм, может быть тогда с HEADERS вообще include в main.cpp не нужен?
Название: Re: Сигналы и слоты: подскажите как подвязать функцию к кнопке..? Отправлено: lit-uriy от Апрель 04, 2010, 09:05 ieroglif, а причём здесь дизайнер, ты вообще на сообщение смотрел, читал?
>>аа.. вон почему таких вопросов не возникает у народа Ещё одна ересь, вопросов не возникает из-за знания С++. ieroglif'а, не слушай учись руками в коде делать, иначе не поймёшь, что и как. Название: Re: Сигналы и слоты: подскажите как подвязать функцию к кнопке..? Отправлено: CProger от Апрель 04, 2010, 12:41 HEADERS += main.cpp а вы всё кроме исходника и .про файла удаляли? Инклюдить в конце надо: #include <moc_main.cpp> И после этого qmake && make.мне этот костыль не помог. SABROG не, без инклюда не срабатывает. |