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

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

Страниц: [1] 2   Вниз
  Печать  
Автор Тема: actionTriggered(QAction * action ) много раз  (Прочитано 13061 раз)
mozgofil
Гость
« : Июль 08, 2009, 19:23 »

соединяю slot actTriggered(QAction *) главного окна
с сигналом actionTriggered(QAction *)  тулбара.
в результате при нажатии на кнопочку тулбара сигнал посылается несколко раз вместо одного!!!
Как правильно сделать?
Записан
Авварон
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3260


Просмотр профиля
« Ответ #1 : Июль 09, 2009, 10:14 »

код в студию, так как ты написал, должно работать... мб у тебя есть лишние коннекты (например забыл закомментить)?
Записан
mozgofil
Гость
« Ответ #2 : Июль 09, 2009, 19:10 »

код в студию, так как ты написал, должно работать... мб у тебя есть лишние коннекты (например забыл закомментить)?

Хм.. ну лишних коннектов точно нет, всё вроде впорядке, разве что имеется промежуточный класс :
Код
C++ (Qt)
class PrimaryFrm: public QMainWindow
{
 
};
class CMainFrm:public PrimaryFrm
{
 Q_OBJECT
......
public slots:
  void actionTriggered(QAction *);
};
 
Избавлюсь от него, потом отпишу что получилось:)
Спасибо за внимание
Записан
mozgofil
Гость
« Ответ #3 : Июль 11, 2009, 09:42 »

Bug, господа!
QT4.5
Код
C++ (Qt)
void MainFrm::CreateMainMenuAndToolbar()
{
QToolBar* ptb = new QToolBar("Sample ToolBar");
QMenu* pmFile = new QMenu("&File");
QMenu* pmHelp = new QMenu("&Help");
this->addToolBar(ptb);
menuBar()->addMenu(pmFile);
menuBar()->addMenu(pmHelp);
 
QAction* a= new QAction("Caption",0);
pmFile->addAction(a);
ptb->addAction(a);
QObject::connect(ptb,SIGNAL(actionTriggered(QAction*)),this,SLOT(frm_actionTriggered(QAction*)));
QObject::connect(pmFile,SIGNAL(triggered(QAction*)),this,SLOT(frm_actionTriggered(QAction*)));
}
 
void MainFrm::frm_actionTriggered(QAction *A)
{
................//2 раза
}
 
при присоединении в 1 слот сигналов от меню и от тулбара ,
к которым добавлен одинаковый QAction, генерируются по 2 сигнала за раз!!!
« Последнее редактирование: Июль 11, 2009, 09:44 от mozgofil » Записан
f-r-o-s-t
Гость
« Ответ #4 : Июль 11, 2009, 09:51 »

А ты попробуй соединить один раз вот так:
Код
C++ (Qt)
connect( a , SIGNAL(triggered()) , SLOT(someSlot()) );
 
void MainFrm::someSlot()
{
//он выполнится один раз, если надо узнать экшион который послал то так
QAction *a = qobject_cast<QAction*>(sender());
}
 
« Последнее редактирование: Июль 11, 2009, 15:29 от f-r-o-s-t » Записан
spectre71
Гость
« Ответ #5 : Июль 11, 2009, 10:56 »

Bug, господа!
QT4.5
...
...
при присоединении в 1 слот сигналов от меню и от тулбара ,
к которым добавлен одинаковый QAction, генерируются по 2 сигнала за раз!!!

Если что-то не получается, надо заглянуть в доку и прочитать, что там написано!

Цитировать
void QToolBar::actionTriggered ( QAction * action )   [signal]

This signal is emitted when an action in this toolbar is triggered. This happens when the action's tool button is pressed, or when the action is triggered in some other way outside the tool bar. The parameter holds the triggered action.
Записан
mozgofil
Гость
« Ответ #6 : Июль 11, 2009, 11:40 »

А ты попробуй соединить один раз вот так:
Код
C++ (Qt)
connect( a , SIGNAL(triggered()) , SLOT(someSlot()) );
 
void MainFrm::someSlot()
{
//он выполнится один раз, если надо узнать акшион который послал то так
QAction *a = qobject_cast<QAction*>(sender());
}
 
если соединять 1 раз или 1 экшн -то проблем нет
Записан
f-r-o-s-t
Гость
« Ответ #7 : Июль 11, 2009, 11:41 »

а в чем тогда проблема ?
Записан
mozgofil
Гость
« Ответ #8 : Июль 11, 2009, 11:43 »

Если что-то не получается, надо заглянуть в доку и прочитать, что там написано!

Цитировать
void QToolBar::actionTriggered ( QAction * action )   [signal]

This signal is emitted when an action in this toolbar is triggered. This happens when the action's tool button is pressed, or when the action is triggered in some other way outside the tool bar. The parameter holds the triggered action.
действительно.Тролли здесь сплоховали Грустный
Записан
f-r-o-s-t
Гость
« Ответ #9 : Июль 11, 2009, 11:46 »

В чем сплоховали ?
Если action находится на тулбаре, но вызван был с помощью шорката, то что нелогичного, непонятного
или плохого в том что произойдет вызов QToolBar::actionTriggered ?
Записан
mozgofil
Гость
« Ответ #10 : Июль 11, 2009, 11:48 »

а в чем тогда проблема ?
В данном случае всё работает не так, как должно было бы.
Разумеется, можно обойти, но всё же я негодую по этому поводу.
Записан
f-r-o-s-t
Гость
« Ответ #11 : Июль 11, 2009, 11:49 »

а в чем тогда проблема ?
В данном случае всё работает не так, как должно было бы.
Разумеется, можно обойти, но всё же я негодую по этому поводу.

а как должно было быть ?
Записан
mozgofil
Гость
« Ответ #12 : Июль 11, 2009, 12:01 »

При нажатии кнопочки тулбара посылается 1 сигнал QToolBar::actionTriggered(QAction*)
При нажатии пункта меню посылается 1 сигнал QMenu::triggered(QAction*)
При нажатии кнопочки тулбара, либо пункта меню, либо шортката соответствующего экшну посылается 1 сигнал QAction::triggered
--
А так как есть - сигнал просто опосредованно конектится к экшну
« Последнее редактирование: Июль 11, 2009, 12:06 от mozgofil » Записан
f-r-o-s-t
Гость
« Ответ #13 : Июль 11, 2009, 12:09 »

При нажатии кнопочки тулбара посылается 1 сигнал QToolBar::actionTriggered(QAction*)
При нажатии пункта меню посылается 1 сигнал QMenu::triggered(QAction*)
При нажатии кнопочки тулбара, либо пункта меню, либо шортката соответствующего экшну посылается 1 сигнал QAction::triggered
--
А так как есть - сигнал просто опосредованно конектится к экшну

А чем не устраивает такой вариант, ведь action один, какая вообще разница каким путем он был вызван ?
Нажат шоркат, пункт меню или тулбар реакция одинаковая, это как раз преимущество экшенов, что бы не писать
много раз один код.
« Последнее редактирование: Июль 11, 2009, 15:28 от f-r-o-s-t » Записан
ритт
Гость
« Ответ #14 : Июль 11, 2009, 15:11 »

mozgofil, докажи, что это баг
Записан
Страниц: [1] 2   Вверх
  Печать  
 
Перейти в:  


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