Initial commit (project based on widgets)

This commit is contained in:
Yury Shuvakin
2022-08-01 21:53:36 +03:00
parent d9396cdc2f
commit 14a7aa699f
411 changed files with 95119 additions and 0 deletions

View File

@@ -0,0 +1,116 @@
#include "cellsmonitorcheckboxdelegate.h"
#include <QCheckBox>
#include <QApplication>
#include <QPainter>
CheckBoxDelegate::CheckBoxDelegate(QObject *parent)
:QStyledItemDelegate (parent)
{
m_circleSize = 15;
}
QWidget *CheckBoxDelegate::createEditor(QWidget *parent, const QStyleOptionViewItem &option, const QModelIndex &index) const
{
Q_UNUSED(option)
Q_UNUSED(index)
//Cоздаем checkbox editor
QCheckBox *editor = new QCheckBox(parent);
return editor;
}
void CheckBoxDelegate::setEditorData(QWidget *editor, const QModelIndex &index) const
{
//Установливаем выбрано/не выбрано
QCheckBox *cb = qobject_cast<QCheckBox *>(editor);
cb->setStyleSheet("QCheckBox::indicator {\n width: 20px;\n height: " + QString::number( m_circleSize ) + "px;\n border: 1px solid grey;\n background: white;\n border-radius:3px;\n} \n\nQCheckBox::indicator:checked {\n border-color: green;\n background: green;\n color:white;\n /*image: url(:/res/checkbox_unchecked_hover.png);*/\n} \n\n\n\nQCheckBox {\n font-weight:bold;\n font-size: 14px;\n}");
cb->setChecked(index.data().toBool());
}
void CheckBoxDelegate::setModelData(QWidget *editor, QAbstractItemModel *model, const QModelIndex &index) const
{
//Записываем данные в модель
QCheckBox *cb = static_cast<QCheckBox *>(editor);
int value = (cb->checkState()==Qt::Checked)? 1 : 0;
model->setData(index, value, Qt::EditRole);
}
void CheckBoxDelegate::updateEditorGeometry(QWidget *editor, const QStyleOptionViewItem &option, const QModelIndex &index) const
{
Q_UNUSED(index);
QStyleOptionButton checkboxstyle;
QRect checkbox_rect = QApplication::style()->subElementRect(QStyle::SE_CheckBoxIndicator, &checkboxstyle);
//Центрирование
checkboxstyle.rect = option.rect;
checkboxstyle.rect.setLeft(option.rect.x() +
option.rect.width()/2 - checkbox_rect.width()/2);
editor->setGeometry(checkboxstyle.rect);
}
void CheckBoxDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const
{
int row = index.row();
int col = index.column();
painter->save();
//Получаем данные
auto data = index.model()->data(index, Qt::DisplayRole);
//Создаем стиль CheckBox
QStyleOptionButton checkboxstyle;
//Выбрано или не выбрано
bool isChecked = data.toBool();
if(data.toBool())
checkboxstyle.state = QStyle::State_On|QStyle::State_Enabled;
else
checkboxstyle.state = QStyle::State_Off|QStyle::State_Enabled;
if(!index.data().isNull())
{
QRect checkbox_rect = QApplication::style()->subElementRect(QStyle::SE_CheckBoxIndicator, &checkboxstyle);
//Центрирование
checkboxstyle.rect = option.rect;
checkboxstyle.rect.setLeft(option.rect.x() +
option.rect.width()/2 - checkbox_rect.width()/2);
RectangleClass r;
int centerX = option.rect.width()/2 - m_circleSize/2;
int centerY = option.rect.height()/2 - m_circleSize/2;
r.draw
(
painter,
QRectF(
option.rect.x() + centerX, //+mx,
option.rect.y() + centerY, //+my,
m_circleSize,
m_circleSize
),
isChecked ? QColor("#009352") // green
: QColor("#dfe0eb"),
11
);
}
else {
RectClass r;
QRectF rectT( option.rect );
r.draw
(
painter,
rectT
);
}
painter->restore();
}