关于QListWidget右菜单的的实现,网上多数资料都没有提到如何使用Qt Creator快速实现(如参考资料[1][2]),本文重点介绍此方法。
1 槽函数生成
通过Qt Creator的UI设计器将QListWidget控件拖放到主界面中,然后右键单击QListWidget控件,在弹出的槽选择框中,选中customContextMenuRequested(Point)槽,然后确定:
图1
若想通过右键单击QListWidget触发与customContexMenuRequsted()绑定的信号,还得设置QListWidget的MenuPolicy属性。有2种方法可以达到此目的。
方法一:
选中QListWidget控件,然后在右侧的属性栏中修改contextMenuPolicy属性为CustomContextMenu,如下图所示:
图1.2
方法二:
在构建函数中添加如下设置代码:
-
ui->seedsListWidget->setContextMenuPolicy( Qt::CustomContextMenu );
说明:(1) seedsListWidget是我对QListWidget控件的名字,实际使用时,根据实际的名字进行修改。
(2) 两种方法,使用其一即可。本文推荐使用方法一。
2 槽函数完善
本文要达到的效果是,为QListWidget控件添加2个右键菜单“Delete”和“Clear”,分别用于删除选中的项和清空QListWidget。
2.1 custumContextMenu槽函数
-
void SegmentationSetting3D::on_seedsListWidget_customContextMenuRequested(const QPoint &pos)
-
{
-
QListWidgetItem* curItem = ui->seedsListWidget->itemAt( pos );
-
if( curItem == NULL )
-
return;
-
-
QMenu *popMenu = new QMenu( this );
-
QAction *deleteSeed = new QAction(tr("Delete"), this);
-
QAction *clearSeeds = new QAction(tr("Clear"), this);
-
popMenu->addAction( deleteSeed );
-
popMenu->addAction( clearSeeds );
-
connect( deleteSeed, SIGNAL(triggered() ), this, SLOT( deleteSeedSlot()) );
-
connect( clearSeeds, SIGNAL(triggered() ), this, SLOT( clearSeedsSlot()) );
-
popMenu->exec( QCursor::pos() );
-
delete popMenu;
-
delete deleteSeed;
-
delete clearSeeds;
-
}
2.2 deleteSeedSlot()
-
void SegmentationSetting3D::deleteSeedSlot()
-
{
-
int ch = QMessageBox::warning(NULL, "Warning",
-
"Are you sure to delete seed ?",
-
QMessageBox::Yes | QMessageBox::No,
-
QMessageBox::No);
-
-
if ( ch != QMessageBox::Yes )
-
return;
-
-
QListWidgetItem * item = ui->seedsListWidget->currentItem();
-
if( item == NULL )
-
return;
-
-
int curIndex = ui->seedsListWidget->row(item);
-
ui->seedsListWidget->takeItem(curIndex);
-
}
2.3 clearSeedsSlot()
-
void SegmentationSetting3D::clearSeedsSlot()
-
{
-
int ch = QMessageBox::warning(NULL, "Warning",
-
"Are you sure to clear seeds ?",
-
QMessageBox::Yes | QMessageBox::No,
-
QMessageBox::No);
-
-
if ( ch != QMessageBox::Yes )
-
return;
-
-
QListWidgetItem * item = ui->seedsListWidget->currentItem();
-
if( item == NULL )
-
return;
-
-
ui->seedsListWidget->clear();
-
}
阅读(2739) | 评论(0) | 转发(0) |