Russian Qt Forum

Qt => Вопросы новичков => Тема начата: Ksar13th от Март 19, 2012, 11:39



Название: Проблема с передачей параметра в слот
Отправлено: Ksar13th от Март 19, 2012, 11:39
Создаю динамическую кнопку buf2 и прописываю строчку
Код:
QObject::connect(buf2, SIGNAL(clicked()),papa, SLOT(press_the_button()));
Затем в классе Widget прописываю слот
Код:
void press_the_button()
{QMessageBox::warning(0,QObject::tr("12345"),"1");}
Всё работает. При нажатии на кнопку вылетает сообщение, я радуюсь.
Но проблема - как передать в слот имя кнопки, например. СЛедующая конструкция не помогла(догадываюсь почему, но не скажу, не уверен):
Код:
QObject::connect(buf2, SIGNAL(clicked()),papa, SLOT(press_the_button(name)));

....

void press_the_button(QString s)
{QMessageBox::warning(0,QObject::tr("12345"),s);}
вылетает сообщение, что такого метода  press_the_button(name) в классе виджет нет.
Буду рад подсказке - каким образом передать имя кнопку в слот?)


Название: Re: Проблема с передачей параметра в слот
Отправлено: mutineer от Март 19, 2012, 11:45
"Неправильно ты, Дядя Федор, бутерброд ешь..." (с)

http://doc.crossplatform.ru/qt/4.7.x/html-qt/signalsandslots.html


Название: Re: Проблема с передачей параметра в слот
Отправлено: Syveren от Март 19, 2012, 14:32
qobject_cast<QPushButton*>(sender())->text();
 


Название: Re: Проблема с передачей параметра в слот
Отправлено: Ksar13th от Март 19, 2012, 14:35
mutineer
Ееее, как минимум понял почему не работало и понял что делает конект. Щас пойму как решить мою проблему. Шпасибо.

Syveren
Мой текущий уровень в QT и C++ не позволяет понять твою строчку.(((
Пока почитаю статью от Мутинира.))


Название: Re: Проблема с передачей параметра в слот
Отправлено: Ksar13th от Март 19, 2012, 15:13
Так. ок, та статья помогла понять.
Но сделал на основе этой статьи:
http://qt.osdn.org.ua/signalmapper.html
Кок раз то, о чём ты Syveren, говорил, похоже. Всего лишь добавил в слот для кнопок строчку
QPushButton *b = (QPushButton *)sender();
В итоге в b получаю кнопку, по которой нажали. Не спорю. пока всё грязно, но потихоньку разбираюсь.)


Название: Re: Проблема с передачей параметра в слот
Отправлено: mutineer от Март 19, 2012, 15:21
Так. ок, та статья помогла понять.
Но сделал на основе этой статьи:
http://qt.osdn.org.ua/signalmapper.html
Кок раз то, о чём ты Syveren, говорил, похоже. Всего лишь добавил в слот для кнопок строчку
QPushButton *b = (QPushButton *)sender();
В итоге в b получаю кнопку, по которой нажали. Не спорю. пока всё грязно, но потихоньку разбираюсь.)

C-style каст использовать не надо - проблем не оберешься потом


Название: Re: Проблема с передачей параметра в слот
Отправлено: Syveren от Март 19, 2012, 16:31
qobject_cast - преобразование типов для наслдеников QObject.
Вообще мне кажется лучше делать через signalmapper.
если через sender, то тогда лучше проверить sender(), ведь слот можно вызвать и напрямую
QPushButton * but  = qobject_cast<QPushButton*>(sender()); //безопасней чем (QPushButton *)sender();

 //Q_ASSERT(but);
if(!but) return;
...


Название: Re: Проблема с передачей параметра в слот
Отправлено: Ksar13th от Март 19, 2012, 17:09
Цитировать
ведь слот можно вызвать и напрямую
Проблему понял.
Программа не большая - всего одиннадцать кнопок будут пользоваться данным слотом. А также у меня пока нет полноценного опыта в QT и в классах я пока слаб, так что не брезгую грязным кодом и тп. Пока главное чтобы работало и пользователи в дальнейшем не прибежали жаловаться, что нашли какой то жёсткий баг.
В последствии буду вгрызаться глубже. Спасибо за помощь.)

*ps: продолжаю канючить - приведите код, который у меня на форме в каком нить компоненте начнёт проигрывать видео файл =3 позязязязя. Знаю, что нужно гуглить Phonon и уже реализовал запуск аудио файла... хотя теорию не грыз. С видео пока траблы... плохо сплю, предвкушая как буду с ним бороться после того, как разгребу текущие траблы.)


Название: Re: Проблема с передачей параметра в слот
Отправлено: mutineer от Март 19, 2012, 17:10
*ps: продолжаю канючить - приведите код, который у меня на форме в каком нить компоненте начнёт проигрывать видео файл =3 позязязязя. Знаю, что нужно гуглить Phonon и уже реализовал запуск аудио файла... хотя теорию не грыз. С видео пока траблы... плохо сплю, предвкушая как буду с ним бороться после того, как разгребу текущие траблы.)

http://doc.qt.nokia.com/qtmobility/multimedia.html


Название: Re: Проблема с передачей параметра в слот
Отправлено: sudo от Март 19, 2012, 17:18
А также у меня пока нет полноценного опыта в QT и в классах я пока слаб, так что не брезгую грязным кодом и тп.

Страшная тайна! Тут очень мало у кого хоть вообще минимальный опыт в QT. В Qt народ шарит, а в QuickTime сомнительно

qobject_cast - преобразование типов для наслдеников QObject.
Вообще мне кажется лучше делать через signalmapper.
если через sender, то тогда лучше проверить sender(), ведь слот можно вызвать и напрямую
QPushButton * but  = qobject_cast<QPushButton*>(sender()); //безопасней чем (QPushButton *)sender();

 //Q_ASSERT(but);
if(!but) return;
...

Или так
Код
C++ (Qt)
if (QPushButton* button = qobject_cast<QPushButton*>(sender()))
{...}
 


Название: Re: Проблема с передачей параметра в слот
Отправлено: andrew.k от Март 19, 2012, 18:23
А также у меня пока нет полноценного опыта в QT и в классах я пока слаб, так что не брезгую грязным кодом и тп.

Страшная тайна! Тут очень мало у кого хоть вообще минимальный опыт в QT. В Qt народ шарит, а в QuickTime сомнительно
Обиделся что ли?  ;D


Название: Re: Проблема с передачей параметра в слот
Отправлено: Ksar13th от Март 19, 2012, 18:38
Цитировать
...а в QuickTime сомнительно...
упс ::)

И mutineer, спасибо. Выручаешь.)


Название: Re: Проблема с передачей параметра в слот
Отправлено: sudo от Март 19, 2012, 19:16
Обиделся что ли?  ;D

Не, меня QuickTime пугает :D


Название: Re: Проблема с передачей параметра в слот
Отправлено: Ksar13th от Март 19, 2012, 21:44
Еееее, таки нагуглил как видео проиграть через Phonon. Чёт, смотря со статистической позиции, не получается у меня дружить в оф сайтами(хотя теорию на них рассписывают круто... практику дарует гугл)) =( ... нашёл три вопроса в инете - у одного не работало видео, у другого звук, у третьего не подключались необходимые файлы... в итоге собрал своего урода =3 ... сижу горжусь...)))
И вдруг кому, из таких же неполноценных бедолаг как я, пригодится мой вариант:
Код:
//подключение(не факт что здесь нужно всё... просто лень выискивать что нужно)
#include <phonon/AudioOutput>
#include <phonon/MediaObject>
#include <phonon/VideoWidget>
#include <phonon/VideoPlayer>
#include <QLabel>
#include <QUrl>
//плюс в pro файле дописываем  "QT += [здесь какой то мусор, на который внимания не обращайте]\phonon"

//далее, где нибудь пишем следующее
//описание
Phonon::MediaObject* media;//для теста видео
Phonon::AudioOutput *for_the_music;//для теста видео
//видео часть
media=new Phonon::MediaObject(this);
media->setCurrentSource(Phonon::MediaSource(QString("E:\\QTexperiments\\tratatata_tata\\111.avi")));
media->enqueue(Phonon::MediaSource(QString("E:\\QTexperiments\\tratatata_tata\\111.avi")));
media->enqueue(Phonon::MediaSource(QString("E:\\QTexperiments\\tratatata_tata\\111.avi")));
//аудио часть
for_the_music=new Phonon::AudioOutput(Phonon::VideoCategory, this);
//создание экранчика и привязка к нему видео и аудио
Phonon::VideoWidget *videoWidget;
videoWidget=new Phonon::VideoWidget(this);
Phonon::createPath(media, videoWidget);
Phonon::createPath(media, for_the_music);
videoWidget->setFixedSize(PANEL_W,PANEL_H);
videoWidget->setGeometry(MAIN_PANEL_X,MAIN_PANEL_Y,PANEL_W,PANEL_H);
videoWidget->show();
media->setPrefinishMark(100);
media->setTransitionTime(-100);
//connect(media, SIGNAL(aboutToFinish(), this, SLOT(onFinishVideo()));//тут привязка слота к сигналу "окончание записи".
media->play();
Вроде всё... не факт что где нить не опечатался(код уже изменился пять минут назад - так что это вырвал из разных файлов).
И да, спасибо за помощь(без сарказма... направить - это уже помочь)).


Название: Re: Проблема с передачей параметра в слот
Отправлено: V1KT0P от Март 19, 2012, 21:58
в итоге собрал своего урода =3 ... сижу горжусь...)))
Если есть время и желание сделать лучше, то я бы посоветовал попробовать прикрутить VLC. Я просто фанатею от него, но правда к проектам я его не подключал. Но так как у него есть GUI на Qt то думаю подключить не сложновато будет, зато сколько плюшек получишь...


Название: Re: Проблема с передачей параметра в слот
Отправлено: Ksar13th от Март 19, 2012, 23:53
Я планирую в течении ближайшего месяца перейти с Винды на Линукс(хотя, щас заплачу, в Линуксе вообще опыта нет... ну да не суть) и уже на нём в совершенстве овладеть Qt - так как ощутил, что возможности открываются при его использовании почти безграничные(тем более после СиБилдера, с которого сполз пять дней назад... пристрелил его и закопал... теперь QtCreatore моя новая любовь). Так вот к чему я это - щас времени нет - у меня осталось шесть дней, чтоб закончить прогу-интерфейс и натравить её на ком-порт(в Билдере и Dev-Cpp такое уже делал, так что не думаю, что возникнут проблемы с портом). А вот после сдачи текущего проекта, продолжу доставать тут всех вопросами и развиваться в этой сфере(пока даже что такое VLC не могу сообразить... разве что что-то знакомое))).
Пойду посплю.))


Название: Re: Проблема с передачей параметра в слот
Отправлено: V1KT0P от Март 20, 2012, 00:01
(пока даже что такое VLC не могу сообразить... разве что что-то знакомое))).
VLC: http://www.videolan.org/ (http://www.videolan.org/) - Мой любимый медиаплеер =). Понимает ОЧЕНЬ много форматов, может налету кодировать в другой формат, принимать поток из сети, вещать поток в сеть...


Название: Re: Проблема с передачей параметра в слот
Отправлено: Kurles от Март 20, 2012, 00:04
в итоге собрал своего урода =3 ... сижу горжусь...)))
Если есть время и желание сделать лучше, то я бы посоветовал попробовать прикрутить VLC. Я просто фанатею от него, но правда к проектам я его не подключал. Но так как у него есть GUI на Qt то думаю подключить не сложновато будет, зато сколько плюшек получишь...
Согласен, очень хорошая штука, и прикрутить довольно просто, на вики написано как (http://wiki.videolan.org/LibVLC_SampleCode_Qt).


Название: Re: Проблема с передачей параметра в слот
Отправлено: Ksar13th от Март 20, 2012, 00:59
Святые хомяки, ведь слышал о нём, да и у соседа видел на ноуте, но в своё время не проникся. А ведь у гадёныша открытый исходный код и есть, как говорите, возможность встраивать его в свои проекты. Чёёёрт, если успею - замучу видео в проге на нём. Спс за ссылки!))