Oh man what a trip. The essentials for anyone who wants to replace checkboxes with QPushbuttons:
void ButtonDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const { bool isChecked = index.data(Qt::CheckStateRole).toInt() == Qt::Checked; //qDebug() << Q_FUNC_INFO << "checkState" << index.row() << index.column() << isChecked << option.state; QStyleOptionButton sob; PushButton button; button.setCheckable(true); button.setChecked(isChecked); button.initStyleOption(&sob); sob.rect = option.rect; sob.text = _text; sob.state = QStyle::State_Raised; sob.state.setFlag( isChecked ? QStyle::State_On : QStyle::State_Off); QApplication::style()->drawControl(QStyle::CE_PushButton, &sob, painter); } void ButtonDelegate::setEditorData(QWidget *editor, const QModelIndex &index) const { qDebug() << Q_FUNC_INFO; QPushButton *button = static_cast<QPushButton*>(editor); bool isChecked = index.model()->data(index, Qt::CheckStateRole).toInt() == Qt::Checked; button->setChecked( ! isChecked); // Toggle it here! } void TableView::mouseReleaseEvent(QMouseEvent *event) { QModelIndex index = indexAt(event->pos()); //setCurrentIndex(index); QWidget * widget = indexWidget(index); if (event->button() == Qt::LeftButton && index.isValid()) { CsvModel *csv_model = static_cast<CsvModel*>(model()); if (csv_model->isOutput(index.column())) { // column you want to use for one click edit(index); endEdit(); // don't need to wait, we toggled it via setEditorData } } QTableView::mousePressEvent(event); } void TableView::endEdit() { QModelIndex index = currentIndex(); currentChanged( index, index ); } _______________________________________________ Interest mailing list Interest@qt-project.org http://lists.qt-project.org/mailman/listinfo/interest