Problem mit QItemDelegate...



  • nach dem Qt tut, habe ich die SpinBox durch eine ComboBox ausgetauscht. Jetzt habe ich das Problem, best. Strings in diese ComboBoxDElegates einzufügen...

    #include <QtGui>
    
        #include "delegate.h"
    
        ComboBoxDelegate::ComboBoxDelegate(QObject *parent)
            : QItemDelegate(parent)
        {
        }
    
        QWidget *ComboBoxDelegate::createEditor(QWidget *parent,
            const QStyleOptionViewItem &/* option */,
            const QModelIndex &/* index */) const
        {
            QComboBox *editor = new QComboBox(parent);
            editor->setEditable(true);
    
            //here i have to specific combox-extensions....
    
            editor->installEventFilter(const_cast<ComboBoxDelegate*>(this));
    
            return editor;
        }
    
        void ComboBoxDelegate::setEditorData(QWidget *editor,
                                            const QModelIndex &index) const
        {
            QString value = index.model()->data(index, Qt::DisplayRole).toString();
    
            QComboBox *comboBox = static_cast<QComboBox*>(editor);
            comboBox->addItem(value);
        }
    
        void ComboBoxDelegate::setModelData(QWidget *editor, QAbstractItemModel *model,
                                           const QModelIndex &index) const
        {
            QComboBox *comboBox = static_cast<QComboBox*>(editor);
            //comboBox->interpretText();
            QString value = comboBox->currentText();
    
            model->setData(index, value);
        }
    
        void ComboBoxDelegate::updateEditorGeometry(QWidget *editor,
            const QStyleOptionViewItem &option, const QModelIndex &/* index */) const
        {
            editor->setGeometry(option.rect);
        }
    

    Angenommen ich möchte so eine Tabelle machen:

    dev/* mountpoint filesystem mountoption ... ...
    hda1  ...        ...  
    hda2  ...        ...
    ...   ...        ...
    

    dann soll in jeder spalte eine seperate liste mit auswahlen für die combobox bereit stehen.

    ich grüble nur wie ich das mit dem abgeleiteten combo-delegate hinbekomme 😕

    ich habe an eine stringlist gedacht,aber die würde für die gesamte tabelle alles durcheinander hauen.

    ich kenne micht mit den recht abstrakten itemdelegates nicht sonderlich gut aus... fällt jemanden eine möglichkeit ein von außen (meinetwegen inder main-funktion) eine QStringlist für jede spalte so eine tabelle zu fügen:

    QStandardItemModel model(4, 2);
            QTableView tableView;
            tableView.setModel(&model);
    
            ComboBoxDelegate delegate;
            tableView.setItemDelegate(&delegate);
    
            for (int row = 0; row < 4; ++row) {
                for (int column = 0; column < 2; ++column) {
                    QModelIndex index = model.index(row, column, QModelIndex());
                    //model.setData(index, QVariant((row+1) * (column+1)));
                }
            }
    

    das wären dann 2 spalten...

    dass dumme ist nur, man greift ja immer auf die tabelle und nicht auf die delegates zu, ich steh im moment etwas auf dem schlauch?! außerdem ist es für mich als anfänger auch recht anstrengend mit QModelIndex'en zu arbeiten, da das ganze recht verkompliziert...



  • mior ist noch eine weniger elgante möglichkeit eingefallen! wesentlcih einfacher... einfach mehrere tabellen machen. und jede spalte dann entsprechend anders füllen! aber wie bekommt man eine tableview ohne senkrechten header hin 😕


Log in to reply