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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: проблема с сигналами и слотами  (Прочитано 3122 раз)
nekitozzz
Гость
« : Август 06, 2011, 23:45 »

Знакомлюсь с Qt, не могу разобраться с сигналами и слотами. Кусок кода при нажатии на кнопку должен отправлять в слот в label строку "Hello", но возникает непонятная мне ошибка
Код:
void MainWindow::on_pushButton_clicked()
{
    QString str="Hello";
    connect
            (&MainWindow::on_pushButton_clicked,
             SIGNAL(str(QString)),
             &MainWindow::on_label_linkActivated,
             SLOT(str(QString)),
             Qt::AutoConnection);
}
void MainWindow::on_label_linkActivated(const QString &link)
{

}




ошибка: no matching function for call to ‘MainWindow::connect(void (MainWindow::*)(), const char [14], void (MainWindow::*)(const QString&), const char [14], Qt::ConnectionType)’

не пойму откуда взялось (const QString&), скорее всего подглядывает в аргументы on_label_linkActivated, но если в аргументах оставить только QStrin, ничего не изменяется
Записан
LisandreL
Птица говорун
*****
Offline Offline

Сообщений: 984


Надо улыбаться


Просмотр профиля
« Ответ #1 : Август 07, 2011, 00:02 »

Читайте ещё раз про сигналы и слоты.
Это просто жесть какая-то, которую поправить-то трудно, только полностью переписать.
1) ссылки на функции-члены класса, вместо ссылок на объекты.
2) попытка подсунуть в коннект конкретную строку
3) str(QString) - просто даже интересно, что эта конструкция в вашем представлении должна делать.
Записан
LisandreL
Птица говорун
*****
Offline Offline

Сообщений: 984


Надо улыбаться


Просмотр профиля
« Ответ #2 : Август 07, 2011, 00:18 »

Должно быть нечто вот такого рода ( хотя я сомневаюсь, что вам нужен именно слот on_label_linkActivated, который автоматически подцепится к сигналу ui->label->llinkActivated ):

Код
C++ (Qt)
MainWindow::MainWindow(...)
{
   ...
    QSignalMapper signalMapper = new QSignalMapper( this );
    connect( ui->pushButton, SIGNAL(clicked()), signalMapper, SLOT(map()) );
    signalMapper->setMapping( ui->pushButton, "Hello" );
    connect( signalMapper, SIGNAL(mapped(const QString &)), this, SIGNAL( on_label_linkActivated( const QString &link ) ) );
}

Пояснять код не буду. Вам надо самому разобраться а не нахвататься по верхам.
Читать в документации: Signals & Slots и QSignalMapper.

Если вдруг не осиливаете английский, то бросайте программирование можете почитать тут:
http://doc.crossplatform.ru/qt/4.7.x/signalsandslots.html
Записан
nekitozzz
Гость
« Ответ #3 : Август 07, 2011, 00:33 »

спасибо большое, просто хотелось реализовать это при помощи Qt Designer (правой кнопкой -> перейти к слоту). Сам знаю что ужасно быдлокодю. Опыта программирования мало, а на Qt это первая скомпилированная программа.

1) Как раз хотелось в теле автоматически созданного кода описать
3)переменная str типа QString, потому что в on_label_linkActivated аргумент QString  Улыбающийся
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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