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

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

Страниц: [1] 2   Вниз
  Печать  
Автор Тема: Контекстное меню QGraphicsItem  (Прочитано 13828 раз)
iukash
Гость
« : Январь 25, 2011, 12:14 »

Взял из документации это
Цитата:void CustomItem::contextMenuEvent(QGraph icsSceneContextMenuEvent *event)
{
QMenu menu;
QAction *removeAction = menu.addAction("Remove");
QAction *markAction = menu.addAction("Mark");
QAction *selectedAction = menu.exec(event->screenPos());
// а что дальше? как прикрутить слот?
}

Делаю так
Цитата:QObject::connect(menu,SIGNAL(trigge red(QAction*)),SLOT(slot_message()) );

slot_message() - это public slots;
Получаю такую ошибку
Цитата:error: cannot call member function 'bool QObject::connect(const QObject*, const char*, const char*, Qt::ConnectionType) const' without object
Записан
alexman
Гость
« Ответ #1 : Январь 25, 2011, 15:02 »

QObject::connect(menu,SIGNAL(trigge red(QAction*)),SLOT(slot_message()) );
что за пробел?
Записан
sadhu
Гость
« Ответ #2 : Январь 25, 2011, 15:11 »

Посмотри повнимательнее чего то не хватает Улыбающийся
можно или так :
QObject::connect(pSender,SIGNAL(signal()),pReceiver,SLOT(slot());
или так:
pReceiver->connect(pSender,SIGNAL(signal()),SLOT(slot());

Оба варианта эквивалентны.
« Последнее редактирование: Январь 25, 2011, 15:14 от sadhu » Записан
sadhu
Гость
« Ответ #3 : Январь 25, 2011, 15:17 »

QObject::connect(menu,SIGNAL(trigge red(QAction*)),SLOT(slot_message()) );
что за пробел?
на этапе компиляцци на это ругаться не должно
Записан
iukash
Гость
« Ответ #4 : Январь 25, 2011, 17:01 »

Цитировать
QObject::connect(menu,SIGNAL(trigge red(QAction*)),SLOT(slot_message()) );
что за пробел?
это просто при переносе на форум ошибся
Цитировать
Посмотри повнимательнее чего то не хватает
можно или так :
QObject::connect(pSender,SIGNAL(signal()),pReceiver,SLOT(slot());
или так:
pReceiver->connect(pSender,SIGNAL(signal()),SLOT(slot());

Оба варианта эквивалентны.
А как сделать так pReceiver это был как раз CustomItem, а слот - это его слот?
Цитировать
void CustomItem::contextMenuEvent(QGraph icsSceneContextMenuEvent *event)
{
QMenu menu;
QAction *removeAction = menu.addAction("Remove");
QAction *markAction = menu.addAction("Mark");
QAction *selectedAction = menu.exec(event->screenPos());
QObject::connect(&menu,SIGNAL(signal()),pReceiver,SLOT(slot_item());
}
void CustomItem::slot_item()
{
QMessageBox::warning(0,QObject::tr("Предупреждение"),QObject::tr("Нажата Создать итем"));
}
}
Записан
alexman
Гость
« Ответ #5 : Январь 25, 2011, 18:23 »

QObject::connect(menu,SIGNAL(trigge red(QAction*)),SLOT(slot_message()) );
что за пробел?
на этапе компиляцци на это ругаться не должно
Я про это не говорю. Я про неправильный сигнал.
Записан
pastor
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 2901



Просмотр профиля WWW
« Ответ #6 : Январь 25, 2011, 18:38 »

Цитировать
QObject::connect(&menu,SIGNAL(triggered(QAction*)),SLOT(slot_message()) );
Записан

Integrated Computer Solutions, Inc. (ICS)
http://www.ics.com/
iukash
Гость
« Ответ #7 : Январь 25, 2011, 20:14 »

Цитировать
QObject::connect(&menu,SIGNAL(triggered(QAction*)),SLOT(slot_message()) );
Делал так, тогда все компилится, запускается, но при попытке нажать на кнопку в консоль выходит сообщение типа slot_message() не является слотом QMenu.
Записан
Kolobok
Гость
« Ответ #8 : Январь 25, 2011, 21:02 »

Правду говорит.
Записан
pastor
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 2901



Просмотр профиля WWW
« Ответ #9 : Январь 25, 2011, 21:18 »

Убери QObject::
Записан

Integrated Computer Solutions, Inc. (ICS)
http://www.ics.com/
iukash
Гость
« Ответ #10 : Январь 25, 2011, 21:26 »

Убери QObject::

Тогда он не видит connect, а если добавить Q_OBJECT в класс наследованный от QGraphicsItem то вылазиют какие то ошибки, сейчас нет кода под рукой точно сказать не могу какие!
Записан
pastor
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 2901



Просмотр профиля WWW
« Ответ #11 : Январь 25, 2011, 21:29 »

Так CustomItem у тебя наследник QGraphicsItem что ли? Необратил сразу на это внимание
Записан

Integrated Computer Solutions, Inc. (ICS)
http://www.ics.com/
alexman
Гость
« Ответ #12 : Январь 25, 2011, 21:31 »

Зачем тебе слот? Обрабатывай нажатие прямо в contextMenuEvent.
Записан
pastor
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 2901



Просмотр профиля WWW
« Ответ #13 : Январь 25, 2011, 21:36 »

Если нужны слоты, то наследуйся от QGraphicsObject
Записан

Integrated Computer Solutions, Inc. (ICS)
http://www.ics.com/
iukash
Гость
« Ответ #14 : Январь 25, 2011, 21:38 »

Зачем тебе слот? Обрабатывай нажатие прямо в contextMenuEvent.
Напишите как? Например хочу создать экземпляр класса и нарисовать его на сцену? И как без слота определить какой QAction подал сигнал?

Цитировать
Если нужны слоты, то наследуйся от QGraphicsObject
Завтра попробую! Спасибо!
Записан
Страниц: [1] 2   Вверх
  Печать  
 
Перейти в:  


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