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

Reply via email to