Fix QT backend creating extra blank windows

This commit is contained in:
Zachary Hall 2024-12-08 10:58:16 -08:00
parent 27113f6443
commit 7b0f270a57
5 changed files with 37 additions and 37 deletions

View file

@ -41,23 +41,23 @@ LicenseModel::~LicenseModel() {
} }
AboutWindow::AboutWindow() { AboutWindow::AboutWindow() {
license_text = new QTextBrowser(); license_text = new QTextBrowser(this);
license_list = new QListView(); license_list = new QListView(this);
license_list->setModel(new LicenseModel()); license_list->setModel(new LicenseModel());
QObject::connect(license_list, &QListView::clicked, [=,this](const QModelIndex &idx) { QObject::connect(license_list, &QListView::clicked, [=,this](const QModelIndex &idx) {
license_text->setText(license_list->model()->data(idx, Qt::UserRole).toString()); license_text->setText(license_list->model()->data(idx, Qt::UserRole).toString());
}); });
license_list->setSelectionMode(QAbstractItemView::SingleSelection); license_list->setSelectionMode(QAbstractItemView::SingleSelection);
license_list->setSelectionBehavior(QAbstractItemView::SelectRows); license_list->setSelectionBehavior(QAbstractItemView::SelectRows);
QBoxLayout *mainLayout = new QBoxLayout(QBoxLayout::TopToBottom); QBoxLayout *mainLayout = new QBoxLayout(QBoxLayout::TopToBottom, this);
QLabel *title = new QLabel("Looper"); QLabel *title = new QLabel("Looper", this);
auto font = title->font(); auto font = title->font();
font.setPointSize(24); font.setPointSize(24);
title->setFont(font); title->setFont(font);
mainLayout->addWidget(title); mainLayout->addWidget(title);
QLabel *versionText = new QLabel(TAG); QLabel *versionText = new QLabel(TAG, this);
mainLayout->addWidget(versionText); mainLayout->addWidget(versionText);
QSplitter *splitter = new QSplitter(Qt::Orientation::Horizontal); QSplitter *splitter = new QSplitter(Qt::Orientation::Horizontal, this);
splitter->addWidget(license_list); splitter->addWidget(license_list);
splitter->addWidget(license_text); splitter->addWidget(license_text);
mainLayout->addWidget(splitter); mainLayout->addWidget(splitter);

View file

@ -46,7 +46,7 @@ LooperWindow::LooperWindow(Playback *playback) : QMainWindow() {
this->layout()->setContentsMargins(QMargins(0, 0, 0, 0)); this->layout()->setContentsMargins(QMargins(0, 0, 0, 0));
this->playback = playback; this->playback = playback;
this->root_layout = new QBoxLayout(QBoxLayout::TopToBottom); this->root_layout = new QBoxLayout(QBoxLayout::TopToBottom);
QWidget *central_widget = new QWidget(); QWidget *central_widget = new QWidget(this);
central_widget->setLayout(this->root_layout); central_widget->setLayout(this->root_layout);
this->setCentralWidget(central_widget); this->setCentralWidget(central_widget);
prefs_window = new PrefsWindow(); prefs_window = new PrefsWindow();
@ -83,18 +83,18 @@ LooperWindow::LooperWindow(Playback *playback) : QMainWindow() {
root_layout->addWidget(bar); root_layout->addWidget(bar);
QSpacerItem *spacer = new QSpacerItem(0, 0, QSizePolicy::Minimum, QSizePolicy::MinimumExpanding); QSpacerItem *spacer = new QSpacerItem(0, 0, QSizePolicy::Minimum, QSizePolicy::MinimumExpanding);
root_layout->addSpacerItem(spacer); root_layout->addSpacerItem(spacer);
QBoxLayout *top_row = new QBoxLayout(QBoxLayout::LeftToRight); QBoxLayout *top_row = new QBoxLayout(QBoxLayout::LeftToRight, this);
pause_resume_btn = new QPushButton("Pause"); pause_resume_btn = new QPushButton("Pause", this);
QObject::connect(pause_resume_btn, &QPushButton::pressed, [=,this]() { QObject::connect(pause_resume_btn, &QPushButton::pressed, [=,this]() {
playback->Pause(); playback->Pause();
}); });
restart_btn = new QPushButton("Restart"); restart_btn = new QPushButton("Restart", this);
QObject::connect(restart_btn, &QPushButton::pressed, [=,this]() { QObject::connect(restart_btn, &QPushButton::pressed, [=,this]() {
playback->Seek(0.0); playback->Seek(0.0);
}); });
top_row->addWidget(pause_resume_btn); top_row->addWidget(pause_resume_btn);
top_row->addWidget(restart_btn); top_row->addWidget(restart_btn);
slider = new LooperSlider("seek", "Position", 0.0, 1.0, 0.00000000001, false); slider = new LooperSlider("seek", "Position", 0.0, 1.0, 0.00000000001, false, this);
slider->DisableModeButton(); slider->DisableModeButton();
slider->UseSlider(); slider->UseSlider();
QObject::connect(slider, &LooperSlider::changed, [=,this](double value) { QObject::connect(slider, &LooperSlider::changed, [=,this](double value) {
@ -106,16 +106,16 @@ LooperWindow::LooperWindow(Playback *playback) : QMainWindow() {
playback->Stop(); playback->Stop();
}); });
top_row->addWidget(stop_btn); top_row->addWidget(stop_btn);
volume_slider = new LooperSlider("volume", "Volume", 0.0, 100.0, 1.0, false); volume_slider = new LooperSlider("volume", "Volume", 0.0, 100.0, 1.0, false, this);
volume_slider->SetLimitLabels("Muted", "Full Volume"); volume_slider->SetLimitLabels("Muted", "Full Volume");
QObject::connect(volume_slider, &LooperSlider::changed, [=,this](double value) { QObject::connect(volume_slider, &LooperSlider::changed, [=,this](double value) {
playback->SetVolume(value); playback->SetVolume(value);
}); });
top_row->addWidget(volume_slider); top_row->addWidget(volume_slider);
QWidget *top_row_widget = new QWidget(); QWidget *top_row_widget = new QWidget(this);
top_row_widget->setLayout(top_row); top_row_widget->setLayout(top_row);
root_layout->addWidget(top_row_widget); root_layout->addWidget(top_row_widget);
QBoxLayout *bottom_row = new QBoxLayout(QBoxLayout::LeftToRight); QBoxLayout *bottom_row = new QBoxLayout(QBoxLayout::LeftToRight, this);
speed_slider = new LooperSlider("speed", "Speed", 0.25, 4.0, 0.01, true); speed_slider = new LooperSlider("speed", "Speed", 0.25, 4.0, 0.01, true);
pitch_slider = new LooperSlider("pitch", "Pitch", 0.25, 4.0, 0.01, true); pitch_slider = new LooperSlider("pitch", "Pitch", 0.25, 4.0, 0.01, true);
tempo_slider = new LooperSlider("tempo", "Tempo", 0.25, 4.0, 0.01, true); tempo_slider = new LooperSlider("tempo", "Tempo", 0.25, 4.0, 0.01, true);
@ -134,7 +134,7 @@ LooperWindow::LooperWindow(Playback *playback) : QMainWindow() {
bottom_row->addWidget(speed_slider); bottom_row->addWidget(speed_slider);
bottom_row->addWidget(pitch_slider); bottom_row->addWidget(pitch_slider);
bottom_row->addWidget(tempo_slider); bottom_row->addWidget(tempo_slider);
QWidget *bottom_row_widget = new QWidget(); QWidget *bottom_row_widget = new QWidget(this);
bottom_row_widget->setLayout(bottom_row); bottom_row_widget->setLayout(bottom_row);
root_layout->addWidget(bottom_row_widget); root_layout->addWidget(bottom_row_widget);
QTimer *timer = new QTimer(this); QTimer *timer = new QTimer(this);

View file

@ -5,12 +5,12 @@
#include <options.hpp> #include <options.hpp>
using namespace Looper::Options; using namespace Looper::Options;
PrefsWindow::PrefsWindow() { PrefsWindow::PrefsWindow() {
auto *root_layout = new QBoxLayout(QBoxLayout::TopToBottom); auto *root_layout = new QBoxLayout(QBoxLayout::TopToBottom, this);
this->setLayout(root_layout); this->setLayout(root_layout);
restart_warning = new QLabel("A restart is needed to apply some changes."); restart_warning = new QLabel("A restart is needed to apply some changes.", this);
restart_warning->hide(); restart_warning->hide();
root_layout->addWidget(restart_warning); root_layout->addWidget(restart_warning);
frontend_btn = new QPushButton(); frontend_btn = new QPushButton(this);
frontend_menu = new QMenu(); frontend_menu = new QMenu();
for (auto &kv : UIBackend::backends) { for (auto &kv : UIBackend::backends) {
UIBackend *backend = kv.second; UIBackend *backend = kv.second;
@ -26,21 +26,21 @@ PrefsWindow::PrefsWindow() {
} }
frontend_btn->setMenu(frontend_menu); frontend_btn->setMenu(frontend_menu);
root_layout->addWidget(frontend_btn); root_layout->addWidget(frontend_btn);
QFrame *frame = new QFrame(); QFrame *frame = new QFrame(this);
frame->setWindowTitle("Labels and Icons"); frame->setWindowTitle("Labels and Icons");
auto *label_settings_group = new QBoxLayout(QBoxLayout::TopToBottom); auto *label_settings_group = new QBoxLayout(QBoxLayout::TopToBottom, this);
frame->setLayout(label_settings_group); frame->setLayout(label_settings_group);
labels_only = new QRadioButton("Labels Only"); labels_only = new QRadioButton("Labels Only", frame);
labels_only->connect(labels_only, &QRadioButton::pressed, [=,this]() { labels_only->connect(labels_only, &QRadioButton::pressed, [=,this]() {
this->new_label_setting = "labels"; this->new_label_setting = "labels";
this->set_options_changed(true); this->set_options_changed(true);
}); });
icons_only = new QRadioButton("Icons Only"); icons_only = new QRadioButton("Icons Only", frame);
icons_only->connect(icons_only, &QRadioButton::pressed, [=,this]() { icons_only->connect(icons_only, &QRadioButton::pressed, [=,this]() {
this->new_label_setting = "icons"; this->new_label_setting = "icons";
this->set_options_changed(true); this->set_options_changed(true);
}); });
both_labels_icons = new QRadioButton("Both"); both_labels_icons = new QRadioButton("Both", frame);
both_labels_icons->connect(both_labels_icons, &QRadioButton::pressed, [=,this]() { both_labels_icons->connect(both_labels_icons, &QRadioButton::pressed, [=,this]() {
this->new_label_setting = "both"; this->new_label_setting = "both";
this->set_options_changed(true); this->set_options_changed(true);
@ -49,12 +49,12 @@ PrefsWindow::PrefsWindow() {
label_settings_group->addWidget(icons_only); label_settings_group->addWidget(icons_only);
label_settings_group->addWidget(both_labels_icons); label_settings_group->addWidget(both_labels_icons);
root_layout->addWidget(frame); root_layout->addWidget(frame);
revert_btn = new QPushButton("Revert"); QWidget *btn_view = new QWidget(this);
QBoxLayout *btn_box = new QBoxLayout(QBoxLayout::LeftToRight, this);
revert_btn = new QPushButton("Revert", btn_view);
QObject::connect(revert_btn, &QPushButton::pressed, this, &PrefsWindow::revert); QObject::connect(revert_btn, &QPushButton::pressed, this, &PrefsWindow::revert);
apply_btn = new QPushButton("Apply"); apply_btn = new QPushButton("Apply", btn_view);
QObject::connect(apply_btn, &QPushButton::pressed, this, &PrefsWindow::apply); QObject::connect(apply_btn, &QPushButton::pressed, this, &PrefsWindow::apply);
QWidget *btn_view = new QWidget();
QBoxLayout *btn_box = new QBoxLayout(QBoxLayout::LeftToRight);
btn_view->setLayout(btn_box); btn_view->setLayout(btn_box);
btn_box->addWidget(revert_btn); btn_box->addWidget(revert_btn);
btn_box->addWidget(apply_btn); btn_box->addWidget(apply_btn);

View file

@ -1,12 +1,12 @@
#include "slider.hpp" #include "slider.hpp"
LooperSlider::LooperSlider(const char *name, const char *label, double min, double max, double tick, bool logarithmic) : QWidget() { LooperSlider::LooperSlider(const char *name, const char *label, double min, double max, double tick, bool logarithmic, QWidget *parent) : QWidget(parent) {
root_layout = new QBoxLayout(QBoxLayout::LeftToRight, this); root_layout = new QBoxLayout(QBoxLayout::LeftToRight, this);
text_layout_view = new QBoxLayout(QBoxLayout::TopToBottom); text_layout_view = new QBoxLayout(QBoxLayout::TopToBottom);
QWidget *text_layout_widget = new QWidget(); QWidget *text_layout_widget = new QWidget(this);
text_layout_widget->setLayout(text_layout_view); text_layout_widget->setLayout(text_layout_view);
root_layout->addWidget(text_layout_widget); root_layout->addWidget(text_layout_widget);
text_label = new QLabel(); text_label = new QLabel(text_layout_widget);
slider = new _looperSlider(Qt::Orientation::Horizontal); slider = new _looperSlider(Qt::Orientation::Horizontal, text_layout_widget);
slider->connect(slider, &_looperSlider::mousePressed, [=,this]() { slider->connect(slider, &_looperSlider::mousePressed, [=,this]() {
pressed = true; pressed = true;
slider_value_changed_after_release = false; slider_value_changed_after_release = false;
@ -25,12 +25,12 @@ LooperSlider::LooperSlider(const char *name, const char *label, double min, doub
slider_value_changed_after_release = true; slider_value_changed_after_release = true;
}); });
text_layout_view->addWidget(slider); text_layout_view->addWidget(slider);
btn = new QPushButton(); btn = new QPushButton(this);
btn->connect(btn, &QPushButton::pressed, [=,this]() { btn->connect(btn, &QPushButton::pressed, [=,this]() {
SwitchModes(); SwitchModes();
}); });
root_layout->addWidget(btn); root_layout->addWidget(btn);
text = new QLineEdit(); text = new QLineEdit(text_layout_widget);
text->setVisible(false); text->setVisible(false);
text_layout_view->addWidget(text); text_layout_view->addWidget(text);
text->connect(text, &QLineEdit::textChanged, [=,this]() { text->connect(text, &QLineEdit::textChanged, [=,this]() {
@ -48,10 +48,10 @@ LooperSlider::LooperSlider(const char *name, const char *label, double min, doub
this->SetValue(output); this->SetValue(output);
} }
}); });
limits_view = new QBoxLayout(QBoxLayout::LeftToRight); limits_view = new QBoxLayout(QBoxLayout::LeftToRight, text_layout_widget);
min_label_view = new QLabel(); min_label_view = new QLabel(text_layout_widget);
limits_view->addWidget(min_label_view, 0, Qt::Alignment::enum_type::AlignLeft); limits_view->addWidget(min_label_view, 0, Qt::Alignment::enum_type::AlignLeft);
max_label_view = new QLabel(); max_label_view = new QLabel(text_layout_widget);
limits_view->addWidget(max_label_view, 0, Qt::Alignment::enum_type::AlignRight); limits_view->addWidget(max_label_view, 0, Qt::Alignment::enum_type::AlignRight);
scaler = new LooperLogScaler(min, max); scaler = new LooperLogScaler(min, max);
set_min(min); set_min(min);

View file

@ -109,7 +109,7 @@ class LooperSlider : public QWidget {
inline void SwitchModes() { inline void SwitchModes() {
SetMode(!text_edit_mode); SetMode(!text_edit_mode);
} }
explicit LooperSlider(const char *name, const char *label, double min, double max, double tick = 0.0001, bool logarithmic = false); explicit LooperSlider(const char *name, const char *label, double min, double max, double tick = 0.0001, bool logarithmic = false, QWidget *parent = nullptr);
~LooperSlider(); ~LooperSlider();
void changeEvent(QEvent *event) override; void changeEvent(QEvent *event) override;
Q_SIGNALS: Q_SIGNALS: