Chinaunix首页 | 论坛 | 博客
  • 博客访问: 303747
  • 博文数量: 71
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 564
  • 用 户 组: 普通用户
  • 注册时间: 2014-07-20 18:15
个人简介

用编程改变大众。。。

文章分类

全部博文(71)

文章存档

2016年(7)

2015年(54)

2014年(10)

我的朋友

分类: C/C++

2015-06-08 11:07:13

关于QListWidget右菜单的的实现,网上多数资料都没有提到如何使用Qt Creator快速实现(如参考资料[1][2]),本文重点介绍此方法。

1 槽函数生成

    通过Qt Creator的UI设计器将QListWidget控件拖放到主界面中,然后右键单击QListWidget控件,在弹出的槽选择框中,选中customContextMenuRequested(Point)槽,然后确定:

                                                                           图1

    若想通过右键单击QListWidget触发与customContexMenuRequsted()绑定的信号,还得设置QListWidget的MenuPolicy属性。有2种方法可以达到此目的。

方法一:

    选中QListWidget控件,然后在右侧的属性栏中修改contextMenuPolicy属性为CustomContextMenu,如下图所示:

                                                                       图1.2

方法二:

    在构建函数中添加如下设置代码:

  1. ui->seedsListWidget->setContextMenuPolicy( Qt::CustomContextMenu );  

    说明:(1) seedsListWidget是我对QListWidget控件的名字,实际使用时,根据实际的名字进行修改。

                (2) 两种方法,使用其一即可。本文推荐使用方法一。

2 槽函数完善

    本文要达到的效果是,为QListWidget控件添加2个右键菜单“Delete”和“Clear”,分别用于删除选中的项和清空QListWidget。

2.1 custumContextMenu槽函数

  1. void SegmentationSetting3D::on_seedsListWidget_customContextMenuRequested(const QPoint &pos)  
  2. {  
  3.     QListWidgetItem* curItem = ui->seedsListWidget->itemAt( pos );  
  4.     if( curItem == NULL )  
  5.         return;  
  6.   
  7.     QMenu *popMenu = new QMenu( this );  
  8.     QAction *deleteSeed = new QAction(tr("Delete"), this);  
  9.     QAction *clearSeeds = new QAction(tr("Clear"), this);  
  10.     popMenu->addAction( deleteSeed );  
  11.     popMenu->addAction( clearSeeds );  
  12.     connect( deleteSeed, SIGNAL(triggered() ), this, SLOT( deleteSeedSlot()) );  
  13.     connect( clearSeeds, SIGNAL(triggered() ), this, SLOT( clearSeedsSlot()) );  
  14.     popMenu->exec( QCursor::pos() );  
  15.     delete popMenu;  
  16.     delete deleteSeed;  
  17.     delete clearSeeds;  
  18. }  

2.2 deleteSeedSlot()

  1. void SegmentationSetting3D::deleteSeedSlot()  
  2. {  
  3.     int ch = QMessageBox::warning(NULL, "Warning",  
  4.                                   "Are you sure to delete seed ?",  
  5.                                   QMessageBox::Yes | QMessageBox::No,  
  6.                                   QMessageBox::No);  
  7.   
  8.     if ( ch != QMessageBox::Yes )  
  9.         return;  
  10.   
  11.     QListWidgetItem * item = ui->seedsListWidget->currentItem();  
  12.     if( item == NULL )  
  13.         return;  
  14.   
  15.     int curIndex = ui->seedsListWidget->row(item);  
  16.     ui->seedsListWidget->takeItem(curIndex);  
  17. }  
2.3 clearSeedsSlot()
  1. void SegmentationSetting3D::clearSeedsSlot()  
  2. {  
  3.     int ch = QMessageBox::warning(NULL, "Warning",  
  4.                                   "Are you sure to clear seeds ?",  
  5.                                   QMessageBox::Yes | QMessageBox::No,  
  6.                                   QMessageBox::No);  
  7.   
  8.     if ( ch != QMessageBox::Yes )  
  9.         return;  
  10.   
  11.     QListWidgetItem * item = ui->seedsListWidget->currentItem();  
  12.     if( item == NULL )  
  13.         return;  
  14.   
  15.     ui->seedsListWidget->clear();  

阅读(2739) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~