Hallo,
in einem QTableWidget habe ich in der ersten Spalte eine QCheckBox und in der zweiten Spalte ist ein QLineEdit bzw. kein spezielles Widget gesetzt, also Standard.
Wie kann ich in der zweiten Spalte in Abhängigkeit der QCheckBox einen QIntValidator setzen?
QTableWidget und QIntValidator
Kannst Du denn nach dem Erstellen des TableWidget mit seinen Daten, etwas im TableWidget verändern? ModelIndex()??? oder Index()?
Wie kommst Du denn bisher an den aktuellen Wert der CheckBoxen ran?
Wie kommst Du denn bisher an den aktuellen Wert der CheckBoxen ran?
"Der erste Trunk aus dem Becher der Naturwissenschaften macht atheistisch, aber auf dem Grund des Bechers wartet Gott."
(W. Heisenberg)
(W. Heisenberg)
Das mache ich in etwa so:
also über QModelIndex. Der Rest erfolgt im QItemDelegate, analog zu dem was in der [FAQ] QTableWidget Tipps und Tricks, Delegates beschrieben ist.
Code: Alles auswählen
void Table::tableDataChanged(const QModelIndex & topLeft, const QModelIndex & bottomRight){
topLeft.model()->sibling(row, 0, topLeft).data(Qt::DisplayRole).toInt();
topLeft.model()->sibling(row, 1, topLeft).data(Qt::DisplayRole).toInt();
}Also wie der Validator im QItemDelegate gesetzt wird ist mir klar, das mache ich so:
Wie und wo kann ich aber jetzt einen anderen QIntValidator(min/max) setzen, wenn sich der Wert der QCheckBox ändert?
Code: Alles auswählen
QWidget *TableDelegate::createEditor(QWidget *parent,
const QStyleOptionViewItem &option,
const QModelIndex &index) const
{
if (index.column() == 0)
{
// QCheckBox erstellen
}
else if (index.column() == 1)
{
QLineEdit *lineEdit = new QLineEdit( parent );
lineEdit->setValidator(new QIntValidator( 0, 500, lineEdit ));
connect(lineEdit, SIGNAL(editingFinished()), this, SLOT(commitAndCloseEditor()));
return lineEdit;
}
else
{
return QItemDelegate::createEditor(parent, option, index);
}
}