LINUX.ORG.RU

[QT] контекстное меню и пр.

 


0

0

Уважаемый ALL! Помогите новичку в QT!

Есть Qtreview с деревом. При нажатии на конкретную ветку выпадает контекстное меню. Это я сделал.
Но! По нажатию на один из пунктов меню я должен добавить нового потомка к дереву. Через Qpoint получаю позицию где надо отобразить само меню а также из Qpoint получаю QmodelIndex.
Вопрос в том как мне передать этот индекс в функцию добавления потомка, если у QAction в меню есть слот activaded, но нету слота, который передает Qpoint или A QmodelIndex?
Как это реализовать?


ui_mainwindow.h:

QObject::connect(treeView, SIGNAL(customContextMenuRequested(QPoint)), MainWindow, SLOT(showPopup(QPoint)));

mainwindow.cpp:
void MainWindow::showPopup(const QPoint & iPoint) 
{ 
  QTreeWidgetItem * item = 0 ; 
  //item = ui->treeView->itemAt(iPosition) ; 
  if ( 0 == item ) 
  { 
    //QMessageBox::information(this, "Popup", "No item selected" ) ; 
    // Build your menu 
    QMenu menu(ui->treeView); 
    if(isDUT(ui->treeView->indexAt(iPoint))){ 
        menu.addAction(ui->actionNew_device);// - а что дальше - не знаю 
        connect(this, SIGNAL(popupActivated(QModelIndex)), this, SLOT(newDev(QModelIndex ))); 
        //emit popupActivated(ui->treeView->indexAt(iPoint)); // если поместить сюда, то вызывается при выпадении списка, а не при нажатии на меню 
    } 
    if(isDevice(ui->treeView->indexAt(iPoint))){ 
        menu.addAction(ui->actionRemove_device); 
        menu.addAction(ui->actionNew_curve); 
    } 
    if(isCurve(ui->treeView->indexAt(iPoint))) menu.addAction(ui->actionRemove_Curve); 
 
     qDebug()<<":popuprightclickMenu"; //just to see if activated 
    menu.exec(ui->treeView->mapToGlobal(iPoint)); 
 
 
  } 

Ответ на: комментарий от mv

Ага, количество QT в Development как-то стало раздражать...

Если Вы гуру и все же прочли пост, так может будет не в падлу помочь?)

spike_by
() автор топика

В слотах можно получить вызывателя через sender(), в твоем случае это может быть наследник от QAction с дополнительным полем QModelIndex, который ты будешь получать из модели по QPoint. Как-то так.

Хотя я извратился через внешнюю переменную, в которую я заношу значение в одном слоте и читаю в другом.

lester_dev ★★★★★
()
Ответ на: комментарий от lester_dev

Хотя я извратился через внешнюю переменную, в которую я заношу значение в одном слоте и читаю в другом.

я тоже к такому склоняюсь)
А можно ли получить индекс выделенного узла не через сигнал, а из свойств.
Например в treeview под java ксть что-то типа getSelected. А тут есть? Не могу найти.

setProperty, setUserData способов много

а чуть подробнее можно?

spike_by
() автор топика
Ответ на: комментарий от lester_dev
есть selectionModel()->currentIndex(); 


Вот именно это я и хотел. Спасибо.

spike_by
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.