【问题标题】:QListWidget Remove selected Item and its settings QTQListWidget 移除所选项目及其设置 QT
【发布时间】:2019-03-04 01:09:43
【问题描述】:

我需要帮助创建一个用于从 QListWidget 中删除项目的函数。我需要复制列表中最后一项的名称,从 .ini 中删除设置,然后从 QListWidget 中删除。到目前为止,我能找到的只是如何使用 QList 删除所选项目。

我的添加函数如下所示:

void Edge::on_slotNew_pressed()
{
    int i = ui->slotList->count();
    i++;

    QString slotNumber = "Slot" + QString::number(i);
    ui->slotList->addItem(slotNumber);

    QSettings settings("config.ini",QSettings::IniFormat);
    qDebug() << settings.fileName();

    settings.beginGroup(slotNumber);
    settings.setValue("slotSizeW", m_prefs.slotSizeW);
    settings.setValue("slotSizeH", m_prefs.slotSizeH);
    settings.setValue("slotPosX", m_prefs.slotPosX);
    settings.setValue("slotPosY", m_prefs.slotPosY);
    settings.setValue("slotMax", m_prefs.slotMax);
    settings.setValue("slotPriority", m_prefs.slotPriority);
    settings.setValue("slotBorderless", m_prefs.slotBorderless);
    settings.setValue("slotHotkey", m_prefs.slotHotkey);
    settings.endGroup();

    qDebug() << slotNumber;

}

**编辑:**更新删除功能
目前我的删除功能看起来像

void Edge::on_slotDelete_clicked()
{
    QSettings settings("slots.ini",QSettings::IniFormat);

    int i = ui->slotList->count();

    QString slotNumber = "Slot" + QString::number(i);

    QList<QListWidgetItem*> items = ui->slotList->selectedItems();
    foreach(QListWidgetItem* item, items)
    {
        ui->slotList->removeItemWidget(item);
        delete item;
    }

    settings.beginGroup(slotNumber);
    settings.remove("");
    settings.endGroup();

    qDebug() << settings.fileName();
}

我 derped 并忘记更新配置名称,所以删除工作,我可能需要一个更好的命名约定,因为它必须作为 QString 传递,QListWidgetItem* 将无法正确传递

【问题讨论】:

    标签: c++ qt


    【解决方案1】:

    删除组及其内容调用:

    settings.beginGroup(item->getSlotNumber()); // please use here the correct method to get the SlotNumber
    settings.remove(""); //removes the group, and all it keys
    settings.endGroup();
    

    要获取 ui->slotList 的姓氏,请使用 count() 方法或 last() 方法获取 slotItems 的最后一项:

    ui->slotList->item(ui->slotList->count() - 1); // or
    ui->slotList->last()
    

    【讨论】:

    • 488: error: no member named 'at' in 'QListWidget' 490: error: C2039: 'last': is not a member of 'QListWidget' 它应该是一个QListWidget,所有的好东西都只适用于QLists
    • 比使用第一个选项:count ui->slotList->item(ui->slotList->count()-1)
    【解决方案2】:

    最终的答案是使用

    void Edge::on_slotDelete_clicked()
    {
        QSettings settings("slots.ini",QSettings::IniFormat);
    
        QString slotText;
    
        QList<QListWidgetItem*> items = ui->slotList->selectedItems();
        foreach(QListWidgetItem* item, items)
        {
            ui->slotList->removeItemWidget(item);
            slotText.append(item->text());//this grabs the name
            delete item;// this deletes list item
        }
    
        settings.beginGroup(slotText);// only takes QString or const QString argument
        settings.remove("");
        settings.endGroup();
    
        qDebug() << slotText;
    }
    

    这就是您可以删除所选项目及其设置的方法!不完全是我想要的,但它将负担改变为在保存部分具有适当的命名约定。感谢大家的支持,是你们推动我去寻找答案!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-11-24
      • 1970-01-01
      • 2018-04-22
      • 2021-05-14
      • 2017-05-21
      • 2021-05-09
      • 2020-10-12
      • 1970-01-01
      相关资源
      最近更新 更多