[gelöst] CheckBox in einem TableView
Verfasst: 24. November 2008 20:25
Ich habe hier ein Problem, wo ich schon länger nach einer sauberen Lösung suche. Ich habe ein QTableView mit eigenem Model und eigenem Delegate.
In der ersten Spalte will ich permanent eine Checkbox anzeigen, die man natürlich auch schalten kann. Das anzeigen der Checkbox, permanent, ist kein Problem:
Das Problem ist, das wenn der Editor aufgeht die Checkbox in der Mitte erscheint, die permanente Checkbox aber linksbündig ist und somit die Checkbox "springt". Mit :
im paint und
im createEditor, hab ich alles rechtsbündig und es springt nichts.
Aber ich hätte es gern zentriert! Ich habe leider keine Idee mehr, wie ich das hin bekomme! Wenn von Euch jemand eine Idee hätte wäre ich sehr dankbar!!!
In der ersten Spalte will ich permanent eine Checkbox anzeigen, die man natürlich auch schalten kann. Das anzeigen der Checkbox, permanent, ist kein Problem:
Code: Alles auswählen
void MyDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option,
const QModelIndex &index) const
{
QStyleOptionViewItemV2 opt = QItemDelegate::setOptions(index, option);
switch(index.column()){
case 0:{
QStyleOptionButton newopt;
newopt.rect = opt.rect;
newopt.palette = opt.palette;
newopt.palette.setColor(QPalette::ButtonText, QColor(Qt::black));
if (index.data().toBool())
newopt.state |= QStyle::State_On;
QApplication::style()->drawControl(QStyle::CE_CheckBox, &newopt, painter);
...
}
QWidget *MyDelegate::createEditor(QWidget *parent,
const QStyleOptionViewItem &option ,
const QModelIndex & index ) const
{
switch(index.column())
{
case 0:
{
QCheckBox *checkBox = new QCheckBox(parent);
//checkBox->setLayoutDirection(Qt::RightToLeft);
return checkBox;
...
}
Code: Alles auswählen
newopt.direction = Qt::RightToLeft;
Code: Alles auswählen
checkBox->setLayoutDirection(Qt::RightToLeft);
Aber ich hätte es gern zentriert! Ich habe leider keine Idee mehr, wie ich das hin bekomme! Wenn von Euch jemand eine Idee hätte wäre ich sehr dankbar!!!