【QT】列表控件之右键编辑

来源:互联网 发布:微软中国程序员薪资 编辑:程序博客网 时间:2024/06/01 09:20

功能截图:

主窗口的listwidget控件中有两个写好的item:“book”“heart”。
在item右键弹出菜单,有“new”“delete”两个action可以选择。
这里写图片描述
在listwidget非item的空白处右键弹出的菜单,只有“new”一个action可以选择。
这里写图片描述
如上两张图所示的操作,结果为:
这里写图片描述

代码实现:

1、给listwidget控件添加两个item:

    ui->listWidget->addItem("book");    ui->listWidget->addItem("heart");

2、设置菜单策略,支持右键菜单:

    ui->listWidget->setContextMenuPolicy(Qt::CustomContextMenu);

3、事件处理:

    //处理右键事件    connect(ui->listWidget,SIGNAL(customContextMenuRequested(const QPoint &)),this,SLOT(OnListContextMenu(const QPoint &)));    //处理两个action——“new”、“delete”事件    connect(ui->actionNew,SIGNAL(triggered()),this,SLOT(Onactionnew()));    connect(ui->actionDelete,SIGNAL(triggered()),this,SLOT(Onactiondelete()));

4、槽函数:

int MainWindow::OnListContextMenu(const QPoint & pt){    QListWidgetItem *selected=ui->listWidget->itemAt(pt);\    int row=ui->listWidget->currentRow();    QMenu *menu=new QMenu();    menu->addAction(ui->actionNew);    if(selected)    {  menu->addAction(ui->actionDelete); }    QPoint p=ui->listWidget->mapToGlobal(pt);    menu->exec(p);    return 0;}int MainWindow::Onactionnew(){    QListWidgetItem* item = new QListWidgetItem();    item->setText("new item");    ui->listWidget->addItem(item);    return 0;}int MainWindow::Onactiondelete(){    int row=ui->listWidget->currentRow();    QListWidgetItem *item=ui->listWidget->takeItem(row);    if(item)    {        delete item;    }    return 0;}
阅读全文
0 0
原创粉丝点击