当前位置: 代码迷 >> QT开发 >> ()怎么在treewidgets里边添加右键菜单
  详细解决方案

()怎么在treewidgets里边添加右键菜单

热度:74   发布时间:2016-04-25 03:13:04.0
(求助)如何在treewidgets里边添加右键菜单
想在特定的item上边添加右键菜单可以删除该item,请问怎么实现,求高手给点思路,有伪代码就更好了,谢谢!
------解决方案--------------------
contextMenuEvent显示菜单QMenu

currentItem获取当前item
delete 这个item
------解决方案--------------------
引用:
Quote: 引用:

Quote: 引用:

Quote: 引用:

contextMenuEvent是不行的,这个在点击标题的时候才触发。
正确的做法是利用QTreeWidget::customContextMenuRequested( )这个信号,在槽函数里进行判断和显示菜单。
void QWidget::customContextMenuRequested(const QPoint & pos) [signal]
contextMenuPolicy设置为Qt::CustomContextMenu

就用这个信号,判断鼠标位置和当前项目。

这个方法貌似不能满足在特定的item上弹出菜单吧,而是整个控件。可以实现特定item上才出现吗?然后删除对应的item。



我已经说了不要使用事件过滤器。用这个信号判断鼠标位置和当前项目。

在customContextMenuRequested对应的槽函数中添加如下代码——

    //itemAt获得当前鼠标位置的Item。
    //此处意思是如果当前鼠标位置下有Item才弹出菜单。
    //你可以改成某个具体的Item,以及进行其它的判断。
    if (ui->treeWidget->itemAt(pos)) {
        auto menu = new QMenu( );
        menu->addMenu("test111")->addAction("test-1");
        menu->addMenu("test222")->addAction("test-2");
        //获得全局坐标。
        auto globalPos = ui->treeWidget->mapToGlobal(pos);
        //偏移X,Y坐标。为了好看。
        globalPos += QPoint(30, 50);
        //其实使用拖出来的menu也是可以的。
        menu->exec(globalPos);
        delete menu;
    };


书籍?把所有有关的书籍都找来看看。
PDF会找吧?我这里有好多本。零基础学Qt4编程、Qt及Qt Quick开发实战精解、Qt高级编程、C++ GUI Qt4 编程、Qt+Creator快速入门。还有几本不够清晰,也没什么好看的,之前删掉了。
最好还是多查查官方自带文档。

结贴给分吧!
  相关解决方案