crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

 
Ответить в данную темуНачать новую тему
> Проблема с emit, Ошибка при попытке программного вызова сигнала
Asgardian2010
  опции профиля:
сообщение 18.1.2013, 17:10
Сообщение #1


Новичок


Группа: Новичок
Сообщений: 6
Регистрация: 19.10.2012
Пользователь №: 3569

Спасибо сказали: 0 раз(а)




Репутация:   0  


Всем привет! Столкнулся с такой проблемой:
в программе по нажатию кнопки,на форме создается элемент listwidget, строки которого заполняются из файла.
Сигнал itemClicked соединен со слотом MyListHandler.
void MainWindow::MyListHandler()
{
...
}
...
void MainWindow::on_pushButton_2_clicked()
{
QListWidget *lw = new QListWidget (grp);
lw->setObjectName("list");  
QObject::connect(lw, SIGNAL(itemClicked(QListWidgetItem*)),this,SLOT(MyListHandler()));
}


В другом месте я пытаюсь программно вызвать сигнал itemClicked для строки для созданного listwidget.

QString nameOfListString = "123";
QListWidget *listFn=this->findChild<QListWidget *>("list");
QListWidgetItem *lwItem=new QListWidgetItem (nameOfListString, listFn);
emit->listFn->itemClicked(lwItem);


При компиляции появляются ошибки:
ошибка: 'void QListWidget::itemClicked(QListWidgetItem*)' is protected
ошибка: within this context
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
ilyabvt
  опции профиля:
сообщение 19.1.2013, 15:05
Сообщение #2


Активный участник
***

Группа: Участник
Сообщений: 297
Регистрация: 23.6.2011
Пользователь №: 2765

Спасибо сказали: 45 раз(а)




Репутация:   3  


1. Сигналы нужно испускать из самого класса.
2. Испускание сигнала выглядит так:
emit itemClicked(lwItem);
.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 19.1.2013, 17:43
Сообщение #3


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


Цитата(Asgardian2010 @ 18.1.2013, 19:10) *
emit->listFn->itemClicked(lwItem);
а где ты такую форму записи нашёл?
emit - это не объект, чтобы обращатся к нему.
Цитата(Asgardian2010 @ 18.1.2013, 19:10) *
я пытаюсь программно вызвать сигнал
А зачем вообще сигнал вызывать? У тебя есть слот - его и вызывай

Подробнее о сигналах и слотах
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Asgardian2010
  опции профиля:
сообщение 21.1.2013, 10:39
Сообщение #4


Новичок


Группа: Новичок
Сообщений: 6
Регистрация: 19.10.2012
Пользователь №: 3569

Спасибо сказали: 0 раз(а)




Репутация:   0  


Спасибо за ответы!

Цитата(Litkevich Yuriy @ 19.1.2013, 18:43) *
Цитата(Asgardian2010 @ 18.1.2013, 19:10)
emit->listFn->itemClicked(lwItem);а где ты такую форму записи нашёл?
emit - это не объект, чтобы обращатся к нему.


Ошибся здесь,когда писал) Было так:
emit listFn->itemClicked(lwItem)


Теперь вызываю сразу слот. Немного переписал.
    QObject::connect(lw, SIGNAL(itemClicked(QListWidgetItem*)),this,SLOT(MyListHandler(QListWidgetItem*)));
...
void MainWindow::MyListHandler(QListWidgetItem* lwItem)
{
    QString WhoPress=lwItem->listWidget()->objectName();//в программе может создаваться несколько элементов
    ...
}
...
    emit MyListHandler(lwItem);
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 21.1.2013, 11:13
Сообщение #5


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


Цитата(Asgardian2010 @ 21.1.2013, 12:39) *
 emit MyListHandler(lwItem);
приписка emit делается только у сигналов (вообще она ничего не значит для компилятора, это только для удобства человека читающего код.


вообще концепцию сигналов и слотов ты не понимаешь, читай справку внимательно
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Asgardian2010
  опции профиля:
сообщение 21.1.2013, 11:30
Сообщение #6


Новичок


Группа: Новичок
Сообщений: 6
Регистрация: 19.10.2012
Пользователь №: 3569

Спасибо сказали: 0 раз(а)




Репутация:   0  


Точно, это же получается как вызов обычной функции..)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 2.12.2024, 1:37