-
Notifications
You must be signed in to change notification settings - Fork 41
/
comboboxdelegatebool.cpp
89 lines (67 loc) · 2.1 KB
/
comboboxdelegatebool.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
#include "comboboxdelegatebool.h"
#include <QDebug>
QCheckBox* chkBoxBool;
ComboBoxDelegateBool::ComboBoxDelegateBool(QObject* parent)
{
Q_UNUSED(parent);
}
QWidget* ComboBoxDelegateBool::createEditor(QWidget* parent,
const QStyleOptionViewItem&,
const QModelIndex& index) const
{
Q_UNUSED(index);
QStringList list;
list << "false"
<< "true";
QCheckBox* editor = new QCheckBox(parent);
return editor;
}
void ComboBoxDelegateBool::setEditorData(QWidget* editor,
const QModelIndex& index) const
{
QString value = index.data().toString();
chkBoxBool = static_cast<QCheckBox*>(editor);
connect(chkBoxBool, &QCheckBox::clicked, this, &ComboBoxDelegateBool::on_chkBox_clicked);
chkBoxBool->setGeometry(editor->x() + 60, editor->y(), 100, editor->height());
if (value == "true") {
chkBoxBool->setChecked(true);
} else {
chkBoxBool->setChecked(false);
}
QPalette p = chkBoxBool->palette();
p.setColor(QPalette::Active, QPalette::WindowText, Qt::white);
p.setColor(QPalette::Inactive, QPalette::WindowText, Qt::white);
chkBoxBool->setPalette(p);
}
void ComboBoxDelegateBool::setModelData(QWidget* editor,
QAbstractItemModel* model, const QModelIndex& index) const
{
Q_UNUSED(model);
chkBoxBool->setGeometry(editor->x() + 60, editor->y(), 100, editor->height());
QString val;
if (chkBoxBool->isChecked()) {
val = "true";
} else {
val = "false";
}
emit ComboBoxDelegateBool::dataChanged(QModelIndex(index), val);
}
void ComboBoxDelegateBool::updateEditorGeometry(QWidget* editor,
const QStyleOptionViewItem& option, const QModelIndex& index) const
{
Q_UNUSED(index);
editor->setGeometry(option.rect);
}
void ComboBoxDelegateBool::on_chkBox_clicked()
{
QPalette p = chkBoxBool->palette();
p.setColor(QPalette::Active, QPalette::WindowText, Qt::white);
p.setColor(QPalette::Inactive, QPalette::WindowText, Qt::white);
chkBoxBool->setPalette(p);
QString val;
if (chkBoxBool->isChecked()) {
val = "true";
} else {
val = "false";
}
}