Context menu on tree view
-
How about:
@
void MainWindow::contextualMenu(const QPoint& point)
{
QModelIndex index = view->currentIndex();if(view->rootIndex() == index)
{
QMenu *menu = new QMenu(view);
QString fileName = model->data(model->index(index.row(), 0),0).toString();
menu->addAction(QString("Import"), this, SLOT(test_slot()));
menu->addAction(QString("Export"), this, SLOT(test_slot()));
menu->exec(QCursor::pos());
}
}
@ -
Hi
I added that if condition but it is not going inside that if condition.
How to add the root element. -
Hi
I want to do something like this
@
Root Node
|-Child1
|-Child2
|-Child3
@So I want to set context menu to Root Node only.
-
If by Root Node you mean an item that has children you should instead check for that condition.
@
if(model->hasChildren(index))
{}
@To set the root index use the "setRootIndex method":https://qt-project.org/doc/qt-4.8/qabstractitemview.html#setRootIndex . But there's only one root item in a view.
-
Hi
I didnt get you.
Below is my tree view structure
@
Root Node
|-Child1
|-1
|-2
|-Child2
|-1
|-2
|-Child3
|-1
|-2
@And now in my case context menu is coming for all above nodes.
I want it to restrict it to only Root Node,Child1,Child2,Child3 -
I think you want to have a behaviour like this:
@
void MainWindow::contextualMenu(const QPoint& point)
{
QModelIndex index = view->currentIndex();if(view->model()->hasChildren(index)) { QMenu *menu = new QMenu(view); QString fileName = model->data(model->index(index.row(), 0),0).toString(); menu->addAction(QString("Import"), this, SLOT(test_slot())); menu->addAction(QString("Export"), this, SLOT(test_slot())); menu->exec(QCursor::pos()); }
}
@ -
Hi
Thanx for you reply.
But what if we want one context menu for Root Node & different one for Child1,Child2,Child3
-
Well then you have to check for the two different cases and create the menu depending on the result of the check.
@
void MainWindow::contextualMenu(const QPoint& point)
{
QModelIndex index = view->currentIndex();if(view->rootIndex() == index /*check if index is that of the RootNode item*/) { // construct the context menu required for ChildItem items } else { if(view->model()->hasChildren(index) /*check if the index is that of a ChildItem item*/) { // construct the context menu required for the RootNode item } } }
@
-
Hi
In my case if i right click on root node it will not enter the below if condition
@
QModelIndex index = view->currentIndex();
if(view->rootIndex() == index)
{
}
@And how to check for child nodes?
-
[quote author="Rajveer" date="1337681154"]Hi
In my case if i right click on root node it will not enter the below if condition
@
QModelIndex index = view->currentIndex();
if(view->rootIndex() == index)
{
}
@And how to check for child nodes?[/quote]
Well if you haven't set a root node, then of course the check performed by the first if condition will return false. And if you care to read my last post you will see that I already told you how to check for child nodes.
You might want to put some effort into this yourself.