【问题标题】:How to edit a QListwidgetItem by using custom context menu?如何使用自定义上下文菜单编辑 QListwidgetItem?
【发布时间】:2020-09-14 19:04:53
【问题描述】:

我的 UI 中有一个名为 xml_scripts_textboxQListWidget 和一些项目,当我右键单击 qlistwidget 中的项目时,会出现一个自定义上下文菜单,并且此上下文菜单的选项之一是 @987654323 @,所以当单击它时,我希望 qlistwidget 中的特定项目可以编辑一次,

我该怎么做?

到目前为止我尝试过的代码是

上下文菜单代码

void MainWindow::on_xml_scripts_textbox_customContextMenuRequested(const QPoint& pos)
{
    QMenu* rMenu = new QMenu(this);
    QAction* edit = new QAction(tr("Edit the List item"), this);

    rMenu->addAction(edit);
    connect(edit, SIGNAL(triggered()), this, SLOT(edithelp()));
    rMenu->exec(cursor().pos());

}

edithelp() 的代码,使列表项可编辑的槽函数

void MainWindow::edithelp()
{
    QListWidgetItem* item_1 = ui->xml_scripts_textbox->takeItem(ui->xml_scripts_textbox->currentRow());
    item_1->setFlags(Qt::ItemIsEditable);  // still not getting editable ?? why ??
}

【问题讨论】:

  • 我不认为 QListiWidget::takeItem() 是你需要的。正如文档所说 QListiWidget::takeItem “从列表小部件中的给定行中删除并返回项目”,因此之后该项目不应再位于 QListWidget 内。您应该改用 QListiWidget::itemAt()。

标签: c++ qt qlistwidget qlistwidgetitem


【解决方案1】:

你设置的项目是可编辑的吗?

item->setFlags(item->flags() | Qt::ItemIsEditable)

【讨论】:

    【解决方案2】:

    试试这个:

    void MainWindow::edithelp()
    {
        QListWidgetItem* item_1 = ui->xml_scripts_textbox->currentItem();
        if (item_1)
            ui->xml_scripts_textbox->editItem(item_1);
    }
    

    【讨论】:

    • 目前我正在使用像这样的对话框QListWidgetItem* item_1 = ui->xml_scripts_textbox->takeItem(ui->xml_scripts_textbox->currentRow()); QString custom_line = QInputDialog::getText(this, "Edit Command", "\nEnter the change:\n", QLineEdit::Normal, item_1->text()); item_1->setText(custom_line); ui->xml_scripts_textbox->addItem(item_1);
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-04
    • 2022-06-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多