> I added an assignment of QStypeOptionButton rect from options, and that now 
> shows the text, but the rest of the button is not rendered (Attached). If I 
> use a pushbutton to initialize options I've got to subclass it because 
> initStypeOptions is protected (why?), won't I overwrite the supplied options 
> and then have to merge them back in, how do I know what needs to be preserved 
> from the original options? This whole system seems backwards. My delegate 
> doesn't have a pointer to a widget does it?
> 
> This whole setup seems backwards, which is unusual for me with Qt. I can get 
> behind the idea of being passed a painter and rect to render into, but the 
> rest of the API seems like it's making a main use-case extremely difficult. 
> Which usually isn't the case with Qt, so it makes me think I'm doing 
> something very wrong. 


Well I'm making some progress.

The current code looks like:
void ButtonDelegate::paint(QPainter *painter, const QStyleOptionViewItem 
&option, const QModelIndex &index) const {
        if (index.column() == 2) {
                bool isChecked = index.data(Qt::CheckStateRole).toInt() == 
Qt::Checked; // always is true for some reason
                qDebug() << Q_FUNC_INFO << "checkState" << index.row() << 
index.column() << option.checkState << isChecked;
                QStyleOptionButton sob;
                PushButton button; // just makes initStyleOption() public!!!
                button.setCheckable(true);    // these don't seem
                button.setChecked(isChecked); // to have any affect.

                button.initStyleOption(&sob);

                sob.rect = option.rect;
                sob.text = _text;
                sob.state |= isChecked ? QStyle::State_On : QStyle::State_Off; 
// this doesn't seem to have any affect either.

                QApplication::style()->drawControl(QStyle::CE_PushButton, &sob, 
painter);
        } else
                QStyledItemDelegate::paint(painter, option, index);
}

And it displays a button that only kind-of works. It doesn't show the check 
state, until I double-click and the editor widget takes over.
Issues:
1. I want single-click to toggle.
2. Check state not being shown until in the editor.


_______________________________________________
Interest mailing list
Interest@qt-project.org
http://lists.qt-project.org/mailman/listinfo/interest

Reply via email to