2012-06-03 6 views
2

J'ai un éditeur numérique qui étend la QSpinBoxReprenez QWidget après avoir utilisé dans QItemEditorCreatorBase

NumericEditor::NumericEditor(QWidget *widget): QSpinBox(widget) 

J'utilise cet éditeur pour modifier le type QVariant::Int dans le QTableWidget

QItemEditorCreatorBase *numericEditor = new QStandardItemEditorCreator<NumericEditor>(); 
factory->registerEditor(QVariant::Int, numericEditor); 

Les données sont entrées dans la table comme d'habitude. Ignorer l'utilisation du mot "couleur". Il est basé sur l'exemple de l'éditeur de couleurs.

QTableWidgetItem *nameItem2 = new QTableWidgetItem(QString("label2")); 
QTableWidgetItem *colorItem2 = new QTableWidgetItem(); 
colorItem2->setData(Qt::DisplayRole, QVariant(int(4))); 
table->setItem(1, 0, nameItem2); 
table->setItem(1, 1, colorItem2); 

La zone de sélection apparaît et fonctionne correctement dans QTableWidget. Mon souhait est d'avoir accès à l'instance de QSpinBox que la table utilise lorsqu'elle édite des cellules QVariant::Int afin que je puisse définir les valeurs min et max.

Comment est-ce que je peux faire ceci?

Répondre

0

Vous pouvez installer un délégué sur la colonne avec QTableWidget::setItemDelegateForColumn et lorsqu'un éditeur est ouvert, sa méthode createEditor est appelée.

class MyDelegate : public QStyledItemDelegate { 
public: 
    QWidget *createEditor (QWidget * parent, const QStyleOptionViewItem & option, const QModelIndex & index) const { 
     // You could create the widget from scratch or call 
     // the base function which will use the QItemEditor you already wrote 
     QWidget * editor = QStyledItemDelegate::createEditor(parent, option, index); 

     // do whatever you need to do with the widget 
     editor->setProperty("minimum", 100); 
     editor->setProperty("maximum", 100); 

     return editor; 
    } 
}; 
Questions connexes