QT treewidget 右鍵菜單


VS2012+QT5.2 ,沒有ui,純代碼實現右鍵

方法一:常規但略麻煩

 1、頭文件slot中聲明

QTreeWidget *tree; 

void showrightMenu(QPoint);//顯示樹目錄右鍵菜單

 2、源文件中

tree = new QTreeWidget;
tree->setHeaderHidden(true);//隱藏樹的標題欄
tree->setContextMenuPolicy(Qt::CustomContextMenu);//右鍵 不可少否則右鍵無反應

connect(tree,SIGNAL(customContextMenuRequested(QPoint)),this,SLOT(showrightMenu(QPoint)));

並實現槽函數

void  classname::showrightMenu(QPoint point)
{
popMenu->clear();//清除原有菜單
popMenu->addAction(expandallAction);//如果放這是全局都有的右鍵
popMenu->addAction(foldedallAction);
//QTreeWidgetItem *item = tree->itemAt(point); //可得到右鍵條目
popMenu->exec(QCursor::pos());
}

 

其中expandallAction、foldedallAction及其方法的實現都是和菜單的一樣如下:

聲明:

QAction *expandallAction;
QAction *expandoneAction;

void expandalltreeItem();//右鍵展開所有樹的條目
void foldedalltreeItem();//右鍵折疊所有樹的條目

實現:

popMenu = new QMenu(this);
expandallAction = new QAction(QStringLiteral("展開全部"),this);
expandallAction->setStatusTip(QStringLiteral("展開全部"));
foldedallAction = new QAction(QStringLiteral("折疊全部"),this);
foldedallAction->setStatusTip(QStringLiteral("折疊全部"));

connect(expandallAction,SIGNAL(triggered()),this,SLOT(expandalltreeItem()));
connect(foldedallAction,SIGNAL(triggered()),this,SLOT(foldedalltreeItem()));

void classname::expandalltreeItem()
{
tree->expandAll();
}

void classname::foldedalltreeItem()
{
tree->collapseAll();
}

 方法二 簡單有效

聲明void contextMenuEvent ( QContextMenuEvent * event ); //右鍵坐標定位

實現:

void classname::contextMenuEvent(QContextMenuEvent * event )
{
popMenu->clear();//清除原有菜單
popMenu->addAction(expandallAction);//如果放這是全局都有的右鍵
popMenu->addAction(foldedallAction);
QPoint point = event->pos();//得到鼠標的位置全局坐標
QTreeWidgetItem *item = tree->itemAt(point);
popMenu->exec(QCursor::pos());//菜單出現的位置為當前鼠標的位置
event->accept();
}

其中expandallAction、foldedallAction及其方法的實現如上

 

區別:方法一的右鍵有效區為tree,也就是目錄區,方法二右鍵的有效區為全部屏幕


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM