Bonjour à tous,

Je n'arrive pas à remonter à mon QComboBox à partir de mon model.

Nom : Capture.PNG
Affichages : 252
Taille : 4,3 Ko

Je m'explique j'ai codé une fonction qui rajoute un model de Checkbox à une combobox (code simplifié):

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
ui -> cbCountry -> setModel(InsertCheckBox("Countries", qlist_Countries));
 
QAbstractItemModel *MainWindow::InsertCheckBox(QString qs_Title, QStringList qsl_Values)
{
    QStandardItemModel* model = new QStandardItemModel(2, 1);
 
    QStandardItem* itemTitle = new QStandardItem(qs_Title);
    model -> setItem(0, 0, itemTitle);
 
    QStandardItem* itemSelectAll = new QStandardItem("Select All");
    itemSelectAll -> setFlags(Qt::ItemIsUserCheckable | Qt::ItemIsEnabled);
    itemSelectAll -> setData(Qt::Unchecked, Qt::CheckStateRole);
    model -> setItem(1, 0, itemSelectAll);
 
    QStandardItem* itemUnSelectAll = new QStandardItem("UnSelect All");
    itemUnSelectAll -> setFlags(Qt::ItemIsUserCheckable | Qt::ItemIsEnabled);
    itemUnSelectAll -> setData(Qt::Unchecked, Qt::CheckStateRole);
    model -> setItem(2, 0, itemUnSelectAll);
 
    for (int i = 0; i < qsl_Values.count(); i++)
    {
            QStandardItem* item = new QStandardItem(qsl_Values[i]);
            item->setFlags(Qt::ItemIsUserCheckable | Qt::ItemIsEnabled);
            item->setData(Qt::Unchecked, Qt::CheckStateRole);
            model->setItem(i + 4, 0, item);
    }
 
    connect(model, SIGNAL(dataChanged (const QModelIndex&, const QModelIndex&)), this, SLOT(slot_changed(const QModelIndex&)));
 
    return (model);
}
J'arrive à récupérer le signal et savoir sur quelle checkbox l'utilisateur a cliqué avec cette fonction :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
void MainWindow::slot_changed(const QModelIndex& model)
{
    QComboBox* cb = model.parent();
    // Select All
    if (model.row() == 1)
    {
        if (ui -> cbCountry -> itemData(model.row(),Qt::CheckStateRole).toBool())
        {
            ui -> cbCountry -> setItemData(2, Qt::Unchecked, Qt::CheckStateRole);
            for (int i = 4; i < ui -> cbCountry -> count(); i++)
            {
                ui -> cbCountry -> setItemData(i, Qt::Checked, Qt::CheckStateRole);
            }
        }
        else
        {
            ui -> cbCountry -> setItemData(model.row(), Qt::Checked, Qt::CheckStateRole);
        }
    }
}
Mais voilà quand j'applique cette fonction à une autre ComboBox je ne peux plus me permettre d'utiliser ui -> cbCountry dans slot_changed. C'est pourquoi j'aimerais à partir de mon QModelIndex remonter à ma ComboBox.

Vous pensez que c'est possible ou faut-il que je fasse différemment ?

Merci