wrangled QWidgets to allow for resizable tracks with track headers

This commit is contained in:
itsmattkc
2019-12-08 05:13:43 +11:00
parent dd8d1e84b0
commit 50f4e8767d
8 changed files with 286 additions and 21 deletions
@@ -1,29 +1,52 @@
#include "trackview.h"
#include <QDebug>
#include <QResizeEvent>
#include <QScrollBar>
#include <QSplitter>
#include <QVBoxLayout>
TrackView::TrackView(QWidget *parent) :
QWidget(parent)
#include "trackviewitem.h"
TrackView::TrackView(Qt::Alignment vertical_alignment, QWidget *parent) :
QScrollArea(parent),
alignment_(vertical_alignment)
{
QVBoxLayout* layout = new QVBoxLayout(this);
layout->setSpacing(0);
QWidget* central = new QWidget();
setWidget(central);
setWidgetResizable(true);
QVBoxLayout* layout = new QVBoxLayout(central);
layout->setMargin(0);
layout->setSpacing(0);
QSplitter* splitter = new QSplitter(Qt::Vertical);
splitter->setChildrenCollapsible(false);
splitter->setHandleWidth(1);
layout->addWidget(splitter);
if (alignment_ == Qt::AlignBottom) {
layout->addStretch();
QWidget* test1 = new QWidget();
test1->setStyleSheet("background: red;");
splitter->addWidget(test1);
connect(verticalScrollBar(), SIGNAL(rangeChanged(int, int)), this, SLOT(ScrollbarRangeChanged(int, int)));
last_scrollbar_max_ = verticalScrollBar()->maximum();
}
QWidget* test3 = new QWidget();
test3->setStyleSheet("background: yellow;");
splitter->addWidget(test3);
splitter_ = new TrackViewSplitter(alignment_);
splitter_->setChildrenCollapsible(false);
layout->addWidget(splitter_);
}
QWidget* test2 = new QWidget();
test2->setStyleSheet("background: blue;");
splitter->addWidget(test2);
void TrackView::resizeEvent(QResizeEvent *event)
{
QScrollArea::resizeEvent(event);
//splitter_->setFixedWidth(viewport()->width());
}
void TrackView::ScrollbarRangeChanged(int, int max)
{
if (max != last_scrollbar_max_) {
int ba_val = last_scrollbar_max_ - verticalScrollBar()->value();
int new_val = max - ba_val;
verticalScrollBar()->setValue(new_val);
last_scrollbar_max_ = max;
}
}