簡體   English   中英

Qcombobox 在 C++ Qt 中刪除和添加項目

[英]Qcombobox remove and add item in C++ Qt

在 Qtableview2 第 1 列中創建 combobox 並從 Qtableview1 第 1 列傳遞值,因此我將第 1 列 table1 值存儲在 Qstringlist 中並傳遞給 combobox

void cymodel::rowvalues() {
    QAbstractItemModel* table1 = ui.tableView->model();
    QAbstractItemModel* table2 = ui.tableView_2->model();
    QStringList colvallist1;

    for (int r = 0, maxI = table1->rowCount(); r < maxI; ++r)
        colvallist1.append(table1->data(table1->index(r, 0)).toString());//store value in stringlist
        for (int i = 0, maxI = table2->rowCount(); i < maxI; ++i)//for all rows
        {
            const QModelIndex idx = table2->index(i, 1);
            QComboBox* combo = qobject_cast<QComboBox*>(ui.tableView_2->indexWidget(idx));
            if (!combo)
            {
                combo = new QComboBox(); // make combo  
                ui.tableView_2->setIndexWidget(idx, combo);// add combo
            }
        //    combo->model()->removeRows(0, combo->count(), combo->rootModelIndex());
            colvallist1.removeDuplicates(); // clear duplicates in colvallist1
            colvallist1.removeAll(QString("")); //remove empty row data
            combo->setPlaceholderText(QString(" "));
            combo->addItems(colvallist1);
}
}

connect(ui.tableView->model(), &QAbstractItemModel::dataChanged, this,
              &cymodel::rowvalues);

Using removerows() all items are removed everytime,,if I added some values in column0 table1 then select in combobox and again adding values in table1 Column0 that time combobox selection go away but if i don't use removerows() then when I' m 將新項目添加到 combobox 然后添加多次,例如添加 2 個值,然后我在 table1 col 中再添加 2,然后在 combobox 中添加 4

那么,如何添加出現在 colvallist1 中但尚未出現在組合中的那些並刪除那些沒有出現在 colvallist1 中的?

謝謝請幫忙!!

thnks,,,我解決了這個問題.. 刪除 combobox 中不在 colvallist1 中的項目 .. 不改變選擇這里是代碼 -

void cymodel::rowvalues() {
    QAbstractItemModel* table1 = ui.tableView->model();
    QAbstractItemModel* table2 = ui.tableView_2->model();
    QStringList colvallist1;

    for (int r = 0, maxI = table1->rowCount(); r < maxI; ++r)
        colvallist1.append(table1->data(table1->index(r, 0)).toString());//store value in stringlist
        for (int i = 0, maxI = table2->rowCount(); i < maxI; ++i)//for all rows
        {
            const QModelIndex idx = table2->index(i, 1);
            QComboBox* combo1 = qobject_cast<QComboBox*>(ui.tableView_2- 
             >indexWidget(idx));
        if (!combo1)
        {
            combo1 = new QComboBox(); // make combo  
            ui.tableView_2->setIndexWidget(idx, combo);// add combo
        }
        colvallist1.removeDuplicates(); // clear duplicates in colvallist1
        colvallist1.removeAll(QString("")); //remove empty row data
        combo1->setPlaceholderText(QString(" "))
        QString selected = combo1->currentText();
        int indx = combo1->currentIndex();
        combo1->clear();
        combo1->addItems(colvallist1);
        combo1->findData(selected);
        combo1->setCurrentIndex(indx);
        combo1->setCurrentText(selected); 
      }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM