Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: qtист от Ноябрь 26, 2013, 09:23



Название: Кнопка с меню в QItemDelegate
Отправлено: qtист от Ноябрь 26, 2013, 09:23
Создаю в QTreeWidget делегаты c кнопкой:

Код
C++ (Qt)
QWidget *ButtonDelegate::createEditor(QWidget *parent,
   const QStyleOptionViewItem &/* option */,
   const QModelIndex &  index ) const
{
QToolButton  *editor = new  QToolButton (parent);
editor->setPopupMode(QToolButton::MenuButtonPopup);
 
QMenu *menu=new QMenu;
QAction * Act = new QAction(tr("Сформированные фразы"),parent);
menu->addAction(Act);
editor->setMenu(menu);
connect(Act, SIGNAL(triggered()), this, SLOT(emitCommitDataP()));
 
connect(editor, SIGNAL(clicked()), this, SLOT(emitCommitData()));
 
return editor;
..........
}
 
void ButtonDelegate::emitCommitData()
{
 QWidget  *Box = qobject_cast<QWidget *>(sender());
}
 
void ButtonDelegate::emitCommitDataP()
{
 QWidget  *Box = qobject_cast<QWidget *>(sender());
}

Кликаю на кнопку,в слоте emitCommitData Box лпределяется,всё защибись ;D
Если на этой же кнопке вызвать пункт из выпадающего меню,в слоте emitCommitDataP
Box равен 0.
Тут надо как-то хитро определять из какой кнопки было выбрано меню? ???


Название: Re: Кнопка с меню в QItemDelegate
Отправлено: mutineer от Ноябрь 26, 2013, 09:55
QToolButton является наследником QWidget, поэтому нормально кастуется, а вот QAction не является, поэтому каст его к виджету дает 0


Название: Re: Кнопка с меню в QItemDelegate
Отправлено: qtист от Ноябрь 26, 2013, 10:27
так делать то что?


Название: Re: Кнопка с меню в QItemDelegate
Отправлено: mutineer от Ноябрь 26, 2013, 11:15
Не кастить QAction к QWidget, очевидно же


Название: Re: Кнопка с меню в QItemDelegate
Отправлено: Hellraiser от Ноябрь 26, 2013, 11:37
Воспользоваться методом setData для QAction.


Название: Re: Кнопка с меню в QItemDelegate
Отправлено: Hellraiser от Ноябрь 26, 2013, 11:40
Ну и, конечно, кастить сендера к QAction.


Название: Re: Кнопка с меню в QItemDelegate
Отправлено: qtист от Ноябрь 26, 2013, 12:00
Ну и, конечно, кастить сендера к QAction.

премного благодарен  ::)
не допёр сразу :'( :'(