Seite 1 von 1

QTableWidget und QIntValidator

Verfasst: 27. April 2010 20:34
von Marco812
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?

Verfasst: 27. April 2010 21:04
von 24dan
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?

Verfasst: 27. April 2010 21:49
von Marco812
Das mache ich in etwa so:

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 über QModelIndex. Der Rest erfolgt im QItemDelegate, analog zu dem was in der [FAQ] QTableWidget Tipps und Tricks, Delegates beschrieben ist.

Verfasst: 28. April 2010 17:29
von Marco812
Also wie der Validator im QItemDelegate gesetzt wird ist mir klar, das mache ich so:

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);
    }
}
Wie und wo kann ich aber jetzt einen anderen QIntValidator(min/max) setzen, wenn sich der Wert der QCheckBox ändert?