Russian Qt Forum
Сентябрь 30, 2024, 12:27 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1] 2   Вниз
  Печать  
Автор Тема: Проблема с передачей параметра в слот  (Прочитано 7707 раз)
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) в классе виджет нет.
Буду рад подсказке - каким образом передать имя кнопку в слот?)
Записан
mutineer
Гость
« Ответ #1 : Март 19, 2012, 11:45 »

"Неправильно ты, Дядя Федор, бутерброд ешь..." (с)

http://doc.crossplatform.ru/qt/4.7.x/html-qt/signalsandslots.html
Записан
Syveren
Гость
« Ответ #2 : Март 19, 2012, 14:32 »

qobject_cast<QPushButton*>(sender())->text();
 
Записан
Ksar13th
Гость
« Ответ #3 : Март 19, 2012, 14:35 »

mutineer
Ееее, как минимум понял почему не работало и понял что делает конект. Щас пойму как решить мою проблему. Шпасибо.

Syveren
Мой текущий уровень в QT и C++ не позволяет понять твою строчку.(((
Пока почитаю статью от Мутинира.))
Записан
Ksar13th
Гость
« Ответ #4 : Март 19, 2012, 15:13 »

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

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

C-style каст использовать не надо - проблем не оберешься потом
Записан
Syveren
Гость
« Ответ #6 : Март 19, 2012, 16:31 »

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

 //Q_ASSERT(but);
if(!but) return;
...
Записан
Ksar13th
Гость
« Ответ #7 : Март 19, 2012, 17:09 »

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

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

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

http://doc.qt.nokia.com/qtmobility/multimedia.html
Записан
sudo
Гость
« Ответ #9 : Март 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()))
{...}
 
Записан
andrew.k
Гость
« Ответ #10 : Март 19, 2012, 18:23 »

А также у меня пока нет полноценного опыта в QT и в классах я пока слаб, так что не брезгую грязным кодом и тп.

Страшная тайна! Тут очень мало у кого хоть вообще минимальный опыт в QT. В Qt народ шарит, а в QuickTime сомнительно
Обиделся что ли?  Смеющийся
Записан
Ksar13th
Гость
« Ответ #11 : Март 19, 2012, 18:38 »

Цитировать
...а в QuickTime сомнительно...
упс Строит глазки

И mutineer, спасибо. Выручаешь.)
Записан
sudo
Гость
« Ответ #12 : Март 19, 2012, 19:16 »

Обиделся что ли?  Смеющийся

Не, меня QuickTime пугает Веселый
Записан
Ksar13th
Гость
« Ответ #13 : Март 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();
Вроде всё... не факт что где нить не опечатался(код уже изменился пять минут назад - так что это вырвал из разных файлов).
И да, спасибо за помощь(без сарказма... направить - это уже помочь)).
Записан
V1KT0P
Гость
« Ответ #14 : Март 19, 2012, 21:58 »

в итоге собрал своего урода =3 ... сижу горжусь...)))
Если есть время и желание сделать лучше, то я бы посоветовал попробовать прикрутить VLC. Я просто фанатею от него, но правда к проектам я его не подключал. Но так как у него есть GUI на Qt то думаю подключить не сложновато будет, зато сколько плюшек получишь...
Записан
Страниц: [1] 2   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.236 секунд. Запросов: 21.