Russian Qt Forum
Июля 06, 2025, 22:19 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Проблема с передачей данных в функцию  (Прочитано 5548 раз)
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;
}
Записан
alexman
Гость
« Ответ #1 : Мая 31, 2011, 08:56 »

Почитай внимательно про сигналы-слоты для начала!
Записан
jatsuk
Гость
« Ответ #2 : Мая 31, 2011, 11:04 »

Перечитал. одна вода...
А примера нормального не нашел, как передать значение.

или может я не то изучаю, киньте ссылку на инфу пожалуйста
Записан
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #3 : Мая 31, 2011, 11:24 »

Перечитал. одна вода...
Читай ещё.
Записан

Qt 5.11/4.8.7 (X11/Win)
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4747



Просмотр профиля WWW
« Ответ #4 : Мая 31, 2011, 11:27 »

слоту нельзя передать параметров больше, чем есть в сигнале.

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

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #5 : Мая 31, 2011, 11:44 »

слоту нельзя передать параметров больше, чем есть в сигнале.
Мало того, в сигнале и в слоте должен прописываться прототип функции.
Записан

Qt 5.11/4.8.7 (X11/Win)
jatsuk
Гость
« Ответ #6 : Мая 31, 2011, 15:15 »

Сделал. Всем спасибо, kambala  особенно.
Сделал с помощью

Код:
if (sender() == ui->pushButton)
     myfunction(1);
else if (sender() == ui->pushButton_2)
     myfunction(2);
Записан
SASA
Гость
« Ответ #7 : Мая 31, 2011, 16:30 »

Лучше через QSignalMapper.
Записан
lit-uriy
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3880


Просмотр профиля WWW
« Ответ #8 : Июня 01, 2011, 12:19 »

Новичкам полезно ещё и учебное пособие почитать
Записан

Юра.
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #9 : Июня 01, 2011, 12:57 »

Код:
if (sender() == ui->pushButton)
     myfunction(1);
else if (sender() == ui->pushButton_2)
     myfunction(2);
"Для начала" конечно нормально, но это имеет тот минус что слоту должны быть известны все подробности ui (где какая кнопка и.т.п.), то есть нарушаются прынцыпы инкапсуляции и др (о которых любят говорить). Ладно, до этого еще надо дожить  Улыбающийся
Записан
Zartul
Гость
« Ответ #10 : Июня 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 );
}
 
 
Записан
Авварон
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3260


Просмотр профиля
« Ответ #11 : Июня 02, 2011, 18:11 »

я бы сделал так:
Не стоит
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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