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

功能截图:

主窗口的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;
}

猜你喜欢

转载自blog.csdn.net/m0_37557014/article/details/73197971