Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: jatsuk от Мая 31, 2011, 08:50



Название: Проблема с передачей данных в функцию
Отправлено: jatsuk от Мая 31, 2011, 08:50
Есть несколько кнопок.
В зависимости от того какую кнопку нажимаем, передается значение в функцию

что- то не работает.... ???

в .h определено  void alfavit(int x);
.сpp есть слоты и функция

Код:
QObject::connect(ui->pushButton,SIGNAL(clicked()),this,SLOT(alfavit(x=1)));//пример слота

 void MainWindow::alfavit(int x)
{
x=6;
}


Название: Re: Проблема с передачей данных в функцию
Отправлено: alexman от Мая 31, 2011, 08:56
Почитай внимательно про сигналы-слоты для начала!


Название: Re: Проблема с передачей данных в функцию
Отправлено: jatsuk от Мая 31, 2011, 11:04
Перечитал. одна вода...
А примера нормального не нашел, как передать значение.

или может я не то изучаю, киньте ссылку на инфу пожалуйста


Название: Re: Проблема с передачей данных в функцию
Отправлено: GreatSnake от Мая 31, 2011, 11:24
Перечитал. одна вода...
Читай ещё (http://doc.crossplatform.ru/qt/4.7.x/signalsandslots.html).


Название: Re: Проблема с передачей данных в функцию
Отправлено: kambala от Мая 31, 2011, 11:27
слоту нельзя передать параметров больше, чем есть в сигнале.

можешь реализовать нужное тебе поведение через QSignalMapper, либо присоединить все кнопки в один слот и там писать что-то типа
Код
C++ (Qt)
if (sender() == button1)
   myfucntion(1);
else if (sender() == button2)
   myfunction(2);
...


Название: Re: Проблема с передачей данных в функцию
Отправлено: GreatSnake от Мая 31, 2011, 11:44
слоту нельзя передать параметров больше, чем есть в сигнале.
Мало того, в сигнале и в слоте должен прописываться прототип функции.


Название: Re: Проблема с передачей данных в функцию
Отправлено: jatsuk от Мая 31, 2011, 15:15
Сделал. Всем спасибо, kambala  особенно.
Сделал с помощью

Код:
if (sender() == ui->pushButton)
     myfunction(1);
else if (sender() == ui->pushButton_2)
     myfunction(2);


Название: Re: Проблема с передачей данных в функцию
Отправлено: SASA от Мая 31, 2011, 16:30
Лучше через QSignalMapper.


Название: Re: Проблема с передачей данных в функцию
Отправлено: lit-uriy от Июня 01, 2011, 12:19
Новичкам полезно ещё и учебное пособие (http://doc.crossplatform.ru/qt/4.6.x/widgets-tutorial.html) почитать


Название: Re: Проблема с передачей данных в функцию
Отправлено: Igors от Июня 01, 2011, 12:57
Код:
if (sender() == ui->pushButton)
     myfunction(1);
else if (sender() == ui->pushButton_2)
     myfunction(2);
"Для начала" конечно нормально, но это имеет тот минус что слоту должны быть известны все подробности ui (где какая кнопка и.т.п.), то есть нарушаются прынцыпы инкапсуляции и др (о которых любят говорить). Ладно, до этого еще надо дожить  :)


Название: Re: Проблема с передачей данных в функцию
Отправлено: Zartul от Июня 02, 2011, 17:55
я бы сделал так:

и на каждую кнопку вешаем свой слот
и в каждом слоте вызываем ф-ю с нужным параметром


Код
C++ (Qt)
alfavit( int x )
{
 
}
 
connect( btn1, SIGNAL( clicked() ), this, SLOT( slotBtn1Pres() ) );
// ...
connect( btn10, SIGNAL( clicked() ), this, SLOT( slotBtn10Pres() ) );
 
slotBtn1Pres()
{
alfavit( 1 );
}
 
// ...
 
slotBtn10Pres()
{
alfavit( 10 );
}
 
 


Название: Re: Проблема с передачей данных в функцию
Отправлено: Авварон от Июня 02, 2011, 18:11
я бы сделал так:
Не стоит