Russian Qt Forum

Qt => Вопросы новичков => Тема начата: Alex_C от Июль 06, 2012, 11:43



Название: Контекстное меню
Отправлено: Alex_C от Июль 06, 2012, 11:43
Вопросы по контекстному меню:
1. Вызов меню для QLineEdit - делал так:
Код
C++ (Qt)
   l->setContextMenuPolicy(Qt::CustomContextMenu);
   connect(l, SIGNAL(customContextMenuRequested(const QPoint&)),
       SLOT(slot_contextMenuRequested(const QPoint&)));
 

и далее

Код
C++ (Qt)
void QSOEntryWindow::slot_contextMenuRequested(const QPoint &p)
{
   QLineEdit *l = qobject_cast<QLineEdit *>(sender());
   QMenu *menu = new QMenu(l);
   QAction *a = menu->addAction(tr("Set field for edit"),
                                this, SLOT(slot_setFieldName()));
 
   menu->exec(l->mapToGlobal(p));
   delete menu;
}
 

и т.п - тут все понялно - sender - это QLineEdit.
А вот при вызове slot_setFieldName уже сендером получается QAction.
Вопрос: есть ли способ в slot_setFieldName узнать, какой лайнедит вызвал его?
Пытался так:

Код
C++ (Qt)
void QSOEntryWindow::slot_setFieldName()
{
   QAction *a = qobject_cast<QAction *>(sender());
   QLineEdit *lineEdit = qobject_cast<QLineEdit *>(a->menu()->parent());
 
 

Но a->menu() = 0x0 (qDebug показал).

2. Вызвать контекстное меня для QLabel - как?


Название: Re: Контекстное меню
Отправлено: mutineer от Июль 06, 2012, 11:49
попробуй
void QAction::setData ( const QVariant & userData )