149 lines
3.8 KiB
C++
149 lines
3.8 KiB
C++
#ifndef MAINWINDOW_H
|
|
#define MAINWINDOW_H
|
|
|
|
|
|
#include <QApplication>
|
|
#include <QWidget>
|
|
#include <QTableView>
|
|
#include <QStandardItemModel>
|
|
#include <QVBoxLayout>
|
|
#include <QHeaderView>
|
|
|
|
#include <QSlider>
|
|
#include <QPainter>
|
|
|
|
#include <QApplication>
|
|
#include <QWidget>
|
|
#include <QPushButton>
|
|
#include <QLineEdit>
|
|
#include <QSlider>
|
|
#include <QCheckBox>
|
|
#include <QVBoxLayout>
|
|
#include <QHBoxLayout>
|
|
#include <QLabel>
|
|
#include <QProxyStyle>
|
|
#include <QPainter>
|
|
#include <QStyleOptionSlider>
|
|
#include <QGraphicsDropShadowEffect>
|
|
|
|
|
|
class TableViewDemo : public QWidget
|
|
{
|
|
public:
|
|
TableViewDemo()
|
|
{
|
|
setWindowTitle("QTableView mit QSlider Editor");
|
|
resize(700, 400);
|
|
|
|
auto* layout = new QVBoxLayout(this);
|
|
|
|
// Model erstellen (3 Spalten, 10 Zeilen)
|
|
auto* model = new QStandardItemModel(10, 2, this);
|
|
|
|
// Header setzen
|
|
model->setHorizontalHeaderLabels({"Name", "Wert"});
|
|
|
|
// Daten einfügen
|
|
for (int row = 0; row < 10; ++row)
|
|
{
|
|
auto* nameItem = new QStandardItem(QString("Eintrag %1").arg(row + 1));
|
|
auto* valueItem = new QStandardItem();
|
|
|
|
// Wert-Item editierbar machen
|
|
valueItem->setData(row * 10, Qt::EditRole); // Startwert 0-90
|
|
valueItem->setEditable(true);
|
|
|
|
// Andere nicht editierbar
|
|
nameItem->setEditable(false);
|
|
|
|
|
|
model->setItem(row, 0, nameItem);
|
|
model->setItem(row, 1, valueItem);
|
|
}
|
|
|
|
// TableView erstellen
|
|
auto* tableView = new QTableView();
|
|
tableView->setModel(model);
|
|
|
|
// === SLIDER DELEGATE für Spalte 2 ===
|
|
//auto* sliderDelegate = new SliderDelegate(this);
|
|
//tableView->setItemDelegateForColumn(1, sliderDelegate);
|
|
|
|
tableView->setAlternatingRowColors(false);
|
|
// === LINIEN ENTFERNEN ===
|
|
tableView->setShowGrid(false);
|
|
|
|
// Header Style
|
|
tableView->horizontalHeader()->setStyleSheet(R"(
|
|
QHeaderView::section {
|
|
background-color: #F5F5F5;
|
|
padding: 10px;
|
|
border: none;
|
|
font-weight: bold;
|
|
color: #333;
|
|
}
|
|
)");
|
|
|
|
|
|
|
|
// Vertikaler Header ausblenden
|
|
tableView->verticalHeader()->setVisible(false);
|
|
|
|
// Alternating Row Colors
|
|
//tableView->setAlternatingRowColors(true);
|
|
|
|
// Style für TableView
|
|
tableView->setStyleSheet(R"(
|
|
QTableView
|
|
{
|
|
background-color: white;
|
|
border: none;
|
|
selection-background-color: #E3F2FD;
|
|
selection-color: black;
|
|
}
|
|
QTableView::item
|
|
{
|
|
padding: 10px;
|
|
border: none;
|
|
}
|
|
QTableView::item:selected {
|
|
background-color: #E3F2FD;
|
|
border: 1px solid #0078D4; /* Rahmen um JEDE Zelle */
|
|
}
|
|
|
|
}
|
|
)");
|
|
|
|
|
|
// Spaltenbreite
|
|
tableView->setColumnWidth(0, 50);
|
|
tableView->setColumnWidth(1, 150);
|
|
tableView->horizontalHeader()->setStretchLastSection(true);
|
|
|
|
// Row Height für bessere Slider-Darstellung
|
|
tableView->verticalHeader()->setDefaultSectionSize(40);
|
|
|
|
// Selection
|
|
tableView->setSelectionBehavior(QAbstractItemView::SelectRows);
|
|
//tableView->setSelectionMode(QAbstractItemView::SingleSelection);
|
|
|
|
// Edit Trigger - Klick zum Editieren
|
|
tableView->setEditTriggers(QAbstractItemView::DoubleClicked |
|
|
QAbstractItemView::SelectedClicked);
|
|
|
|
layout->addWidget(tableView);
|
|
|
|
// Signal für Änderungen
|
|
connect(model, &QStandardItemModel::dataChanged, this,
|
|
[](const QModelIndex& topLeft, const QModelIndex& bottomRight) {
|
|
if (topLeft.column() ==1) {
|
|
int row = topLeft.row();
|
|
int value = topLeft.data(Qt::DisplayRole).toInt();
|
|
qDebug() << "Zeile" << row << "wurde auf" << value << "gesetzt";
|
|
}
|
|
});
|
|
}
|
|
};
|
|
|
|
#endif // MAINWINDOW_H
|