better ui, change colors and font
This commit is contained in:
parent
1fccbf64fd
commit
88704cd726
9 changed files with 129 additions and 97 deletions
|
@ -4,39 +4,47 @@ Libre Media Server Audio - An Open source Media Server for arts and performing.
|
||||||
https://git.criptomart.net/libremediaserver
|
https://git.criptomart.net/libremediaserver
|
||||||
*******************************************************************************
|
*******************************************************************************
|
||||||
|
|
||||||
Lbre Media Server ChangeLog
|
Libre Media Server ChangeLog
|
||||||
|
|
||||||
v 0.2.0 Antigona (24/04/2024)
|
|
||||||
+ change engine to miniaudio because is imposible pan in SFML and it has not access to low API and audio processing.
|
|
||||||
+ Refactor all audio methods to MiniAudioEngine.
|
|
||||||
|
|
||||||
|
|
||||||
|
v 0.2.0 Antígona (24/04/2024)
|
||||||
|
+ Change audio engine to miniaudio because is imposible pan in SFML and it has not access to low API and audio processing.
|
||||||
|
+ Refactor all audio methods to MiniAudioEngine class.
|
||||||
+ Select sound device output.
|
+ Select sound device output.
|
||||||
+ pan.
|
+ Pan.
|
||||||
+ Show faders values.
|
+ Show faders values. New SliderGroup class.
|
||||||
+ play offset.
|
+ Entry Point 16 bits.
|
||||||
+ Refactor AudioMasterWidget to AudioDMXReceptionWidget.
|
+ Refactor AudioMasterWidget to AudioDMXReceptionWidget.
|
||||||
+ mp3, flac, wav (mp3 has given some errors seeking cursor...).
|
+ Read mp3, flac, wav (mp3 has given some errors seeking cursor...).
|
||||||
+ settings dialog not working, only read the conf file at startup.
|
+ Removed settings dialog, only read xml conf file at startup.
|
||||||
+ variable number of layers.
|
+ Real dynamic variable number of layers based on conf file setting.
|
||||||
+ olathread, send double channels only once for each dmx frame buffer.
|
+ OlaThread send double channels (volume, entry point, load media) only once for each dmx frame buffer.
|
||||||
|
+ Terminal mode without graphical interface. All audio methods has been refactorized out of QWidget world.
|
||||||
|
+ Compilation without GUI (-DNOGUI).
|
||||||
|
+ New Status "Iddle" in playbacks if is not loaded.
|
||||||
|
+ New DMX personality version, better sort for audio needs (first load media, set vol, pan, etc, last playback order);
|
||||||
|
|
||||||
v 0.1.3 Unreleased (19/04/2024)
|
v 0.1.3 Leúcade (19/04/2024)
|
||||||
|
|
||||||
+ Ubuntu 22.04 jammy.
|
+ Ubuntu 22.04 jammy.
|
||||||
+ Use SFML as audio engine.
|
|
||||||
+ Qt 5.15.3.
|
+ Qt 5.15.3.
|
||||||
+ pitch.
|
+ Pitch.
|
||||||
+ loop.
|
+ Loop.
|
||||||
|
|
||||||
v 0.1.2 Mayordomo (12/08/2015)
|
v 0.1.2 Mayordomo (12/08/2015)
|
||||||
|
|
||||||
- GUI config
|
- GUI config.
|
||||||
- Several bugs tested in real world
|
- Several bugs tested in real world.
|
||||||
- variable layers
|
- Variable layers.
|
||||||
- SFML as audio engine
|
- SFML as audio engine.
|
||||||
|
|
||||||
v 0.1.1 Pascual (24/09/2014)
|
v 0.1.1 Pascual (24/09/2014)
|
||||||
|
|
||||||
+ First Version: 4 layers playing .ogg
|
+ First Version: 4 layers playing .ogg.
|
||||||
+ Needs Open Lighting Arquitecture => 0.9.0
|
+ Needs Open Lighting Arquitecture => 0.9.0.
|
||||||
+ Pure Data as audio engine
|
+ Pure Data as audio engine.
|
||||||
|
|
||||||
|
|
|
@ -20,8 +20,8 @@ v 0.2.2
|
||||||
+ hay que empaquetar OLA, incluirlo en el binario, o implementar sACN y linkarlo estáticamente.
|
+ hay que empaquetar OLA, incluirlo en el binario, o implementar sACN y linkarlo estáticamente.
|
||||||
+ https://github.com/ETCLabs/sACN
|
+ https://github.com/ETCLabs/sACN
|
||||||
- Qt6.
|
- Qt6.
|
||||||
- audio processing (eq, rev, compresor, ...) por master y capa.
|
- Audio processing (eq, rev, compresor, ...) by master and layer.
|
||||||
- CIPT/MSex, send icons play-pause-stop.
|
- CIPT/MSex, send icons play/pause/stop.
|
||||||
- Rasp build.
|
- Rasp build.
|
||||||
- Octopus Sound Card support (6 outputs - 8 inputs).
|
- Octopus Sound Card support (6 outputs - 8 inputs).
|
||||||
|
|
||||||
|
@ -41,15 +41,13 @@ v 0.2.1
|
||||||
- audio device linked, outputs will be redirected there.
|
- audio device linked, outputs will be redirected there.
|
||||||
- dmx address + universe settings.
|
- dmx address + universe settings.
|
||||||
- Rose noise and sine generator in menu to test system.
|
- Rose noise and sine generator in menu to test system.
|
||||||
- Keyboards strokes, load media files from ui.
|
- Ui/Ux; Keyboards strokes, load media files from ui.
|
||||||
- Dar la opción clickeando en el widget de tiempo de poner una cuenta atrás en vez de hacia delante.
|
- Ui/Ux: Dar la opción clickeando en el widget de tiempo de poner una cuenta atrás en vez de hacia delante.
|
||||||
- Logs, verbosity, timestamp.
|
- Logs, verbosity, timestamp.
|
||||||
- Bufgix: depurar errores cuando no carga la librería de medias, cambia el númmero de capas, cambia el universo, etc.
|
- New play mode without pitch control, it saves resources. MA_SOUND_FLAG_NO_PITCH
|
||||||
- New control mode without pitch control, it saves resources. MA_SOUND_FLAG_NO_PITCH
|
|
||||||
- Vumeter or indicator about audio output in layer and master.
|
- Vumeter or indicator about audio output in layer and master.
|
||||||
- SettingsDialog.
|
- SettingsDialog.
|
||||||
- Load/save conf file.
|
- Load/save conf file.
|
||||||
- ¿stop offset? is it needed?
|
- ¿Exit Point? is it needed?
|
||||||
- decouple MiniAudioEngine from AudioWidget, starts whith no gui or with audio in a dedicated thread.
|
- Hardening: check return errors, i'm too happy....
|
||||||
- New Status "Iddle" in playbacks if is not loaded.
|
- Tests: errors on wrong conf file.
|
||||||
- check return errors, we are too happy....
|
|
||||||
|
|
|
@ -8,9 +8,31 @@ AudioLayerWidget::AudioLayerWidget(QWidget *parent, int layer):
|
||||||
{
|
{
|
||||||
QVBoxLayout *layout = new QVBoxLayout;
|
QVBoxLayout *layout = new QVBoxLayout;
|
||||||
|
|
||||||
|
QVBoxLayout *playback = new QVBoxLayout;
|
||||||
|
m_folderValue = new QLabel;
|
||||||
|
//m_folderValue->setMaximumWidth(160);
|
||||||
|
m_folderValue->setAlignment(Qt::AlignHCenter);
|
||||||
|
m_folderValue->setStyleSheet(
|
||||||
|
"color: white;"
|
||||||
|
"background-color: black;"
|
||||||
|
);
|
||||||
|
playback->addWidget(m_folderValue);
|
||||||
|
m_fileValue = new QLabel;
|
||||||
|
//m_fileValue->setMaximumWidth(160);
|
||||||
|
m_fileValue->setAlignment(Qt::AlignHCenter);
|
||||||
|
m_fileValue->setStyleSheet(
|
||||||
|
"color: white;"
|
||||||
|
"background-color: black;"
|
||||||
|
);
|
||||||
|
|
||||||
|
playback->addWidget(m_fileValue);
|
||||||
|
playback->setSpacing(0);
|
||||||
|
playback->setContentsMargins(0, 0, 0, 0);
|
||||||
|
layout->addLayout(playback);
|
||||||
|
|
||||||
m_suspendResumeButton = new QPushButton(this);
|
m_suspendResumeButton = new QPushButton(this);
|
||||||
m_suspendResumeButton->setText(StatusStr[Status::Iddle]);
|
m_suspendResumeButton->setText(StatusStr[Status::Iddle]);
|
||||||
m_suspendResumeButton->setMaximumWidth(200);
|
//m_suspendResumeButton->setMaximumWidth(180);
|
||||||
//connect(m_suspendResumeButton, SIGNAL(clicked()), SLOT(toggleSuspendResume()));
|
//connect(m_suspendResumeButton, SIGNAL(clicked()), SLOT(toggleSuspendResume()));
|
||||||
layout->addWidget(m_suspendResumeButton);
|
layout->addWidget(m_suspendResumeButton);
|
||||||
|
|
||||||
|
@ -19,7 +41,7 @@ AudioLayerWidget::AudioLayerWidget(QWidget *parent, int layer):
|
||||||
m_progress->setRange(0, 0);
|
m_progress->setRange(0, 0);
|
||||||
m_progress->setValue(0);
|
m_progress->setValue(0);
|
||||||
m_progress->setFormat("%v / %m");
|
m_progress->setFormat("%v / %m");
|
||||||
m_progress->setMaximumWidth(200);
|
//m_progress->setMaximumWidth(180);
|
||||||
layout->addWidget(m_progress);
|
layout->addWidget(m_progress);
|
||||||
|
|
||||||
m_progressTime = new QTimeEdit;
|
m_progressTime = new QTimeEdit;
|
||||||
|
@ -28,7 +50,7 @@ AudioLayerWidget::AudioLayerWidget(QWidget *parent, int layer):
|
||||||
m_progressTime->setDisplayFormat("h:mm:ss:zzz");
|
m_progressTime->setDisplayFormat("h:mm:ss:zzz");
|
||||||
m_progressTime->setReadOnly(true);
|
m_progressTime->setReadOnly(true);
|
||||||
m_progressTime->setButtonSymbols(QAbstractSpinBox::NoButtons);
|
m_progressTime->setButtonSymbols(QAbstractSpinBox::NoButtons);
|
||||||
m_progressTime->setMaximumWidth(88);
|
//m_progressTime->setMaximumWidth(80);
|
||||||
m_progressTime->setFocusPolicy(Qt::NoFocus);
|
m_progressTime->setFocusPolicy(Qt::NoFocus);
|
||||||
m_totalTimeValue = new QTimeEdit;
|
m_totalTimeValue = new QTimeEdit;
|
||||||
m_totalTimeValue->setObjectName("Track Length");
|
m_totalTimeValue->setObjectName("Track Length");
|
||||||
|
@ -36,32 +58,28 @@ AudioLayerWidget::AudioLayerWidget(QWidget *parent, int layer):
|
||||||
m_totalTimeValue->setDisplayFormat("h:mm:ss:zzz");
|
m_totalTimeValue->setDisplayFormat("h:mm:ss:zzz");
|
||||||
m_totalTimeValue->setReadOnly(true);
|
m_totalTimeValue->setReadOnly(true);
|
||||||
m_totalTimeValue->setButtonSymbols(QAbstractSpinBox::NoButtons);
|
m_totalTimeValue->setButtonSymbols(QAbstractSpinBox::NoButtons);
|
||||||
m_totalTimeValue->setMaximumWidth(88);
|
//m_totalTimeValue->setMaximumWidth(80);
|
||||||
m_totalTimeValue->setFocusPolicy(Qt::NoFocus);
|
m_totalTimeValue->setFocusPolicy(Qt::NoFocus);
|
||||||
QHBoxLayout *status = new QHBoxLayout;
|
QHBoxLayout *status = new QHBoxLayout;
|
||||||
status->addWidget(m_progressTime);
|
status->addWidget(m_progressTime);
|
||||||
status->addWidget(m_totalTimeValue);
|
status->addWidget(m_totalTimeValue);
|
||||||
layout->addLayout(status);
|
layout->addLayout(status);
|
||||||
QVBoxLayout *playback = new QVBoxLayout;
|
|
||||||
m_folderValue = new QLabel;
|
|
||||||
m_folderValue->setMaximumWidth(200);
|
|
||||||
playback->addWidget(m_folderValue);
|
|
||||||
m_fileValue = new QLabel;
|
|
||||||
m_fileValue->setMaximumWidth(200);
|
|
||||||
playback->addWidget(m_fileValue);
|
|
||||||
layout->addLayout(playback);
|
|
||||||
|
|
||||||
QHBoxLayout *volumeBox = new QHBoxLayout;
|
QHBoxLayout *volumeBox = new QHBoxLayout;
|
||||||
m_volume = new SliderGroup(0 , 100, 2, NULL);
|
m_volume = new SliderGroup("Vol", 0 , 100, 2, NULL);
|
||||||
volumeBox->addWidget(m_volume);
|
volumeBox->addWidget(m_volume);
|
||||||
connect(m_volume, SIGNAL(valueChanged(float)), this, SLOT(volumeChanged(float)));
|
connect(m_volume, SIGNAL(valueChanged(float)), this, SLOT(volumeChanged(float)));
|
||||||
m_pan = new SliderGroup(0 , 255, 0, NULL);
|
m_pan = new SliderGroup("Pan", 0 , 255, 0, NULL);
|
||||||
volumeBox->addWidget(m_pan);
|
volumeBox->addWidget(m_pan);
|
||||||
connect(m_pan, SIGNAL(valueChanged(float)), this, SLOT(panChanged(float)));
|
connect(m_pan, SIGNAL(valueChanged(float)), this, SLOT(panChanged(float)));
|
||||||
m_pitch = new SliderGroup(0 , 255, 0, NULL);
|
m_pitch = new SliderGroup("Pitch", 0 , 255, 0, NULL);
|
||||||
volumeBox->addWidget(m_pitch);
|
volumeBox->addWidget(m_pitch);
|
||||||
|
volumeBox->setSpacing(0);
|
||||||
|
volumeBox->setContentsMargins(0, 0, 0, 0);
|
||||||
connect(m_pitch, SIGNAL(valueChanged(float)), this, SLOT(pitchChanged(float)));
|
connect(m_pitch, SIGNAL(valueChanged(float)), this, SLOT(pitchChanged(float)));
|
||||||
layout->addLayout(volumeBox);
|
layout->addLayout(volumeBox);
|
||||||
|
layout->setAlignment(Qt::AlignHCenter);
|
||||||
|
layout->setSpacing(0);
|
||||||
|
layout->setContentsMargins(2, 2, 2, 2);
|
||||||
this->setLayout(layout);
|
this->setLayout(layout);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -10,6 +10,8 @@ AudioWidget::AudioWidget() :
|
||||||
connect(alw, SIGNAL(uiSliderChanged(int, Slider, int)), this, SLOT(uiSliderAction(int, Slider, int)));
|
connect(alw, SIGNAL(uiSliderChanged(int, Slider, int)), this, SLOT(uiSliderAction(int, Slider, int)));
|
||||||
connect(alw, SIGNAL(uiPlaybackChanged(int, Status)), this, SLOT(uiChangePlaybackStatus(int, Status)));
|
connect(alw, SIGNAL(uiPlaybackChanged(int, Status)), this, SLOT(uiChangePlaybackStatus(int, Status)));
|
||||||
}
|
}
|
||||||
|
m_layout->setSpacing(0);
|
||||||
|
m_layout->setContentsMargins(0, 0, 0, 0);
|
||||||
setLayout(m_layout);
|
setLayout(m_layout);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -9,6 +9,8 @@ dmxWidget::dmxWidget(QWidget *parent) :
|
||||||
QVBoxLayout *vbox = new QVBoxLayout;
|
QVBoxLayout *vbox = new QVBoxLayout;
|
||||||
m_receiveDMX->setText("DMX Signal");
|
m_receiveDMX->setText("DMX Signal");
|
||||||
vbox->addWidget(m_receiveDMX);
|
vbox->addWidget(m_receiveDMX);
|
||||||
|
vbox->setSpacing(1);
|
||||||
|
vbox->setContentsMargins(1, 1, 1, 1);
|
||||||
this->setLayout(vbox);
|
this->setLayout(vbox);
|
||||||
connect(m_watchDMX, SIGNAL(timeout()),
|
connect(m_watchDMX, SIGNAL(timeout()),
|
||||||
this, SLOT(watchDMXExpired()));
|
this, SLOT(watchDMXExpired()));
|
||||||
|
|
|
@ -32,8 +32,16 @@ libreMediaServerAudioUi::libreMediaServerAudioUi(QWidget *parent)
|
||||||
QDockWidget *topWidget = new QDockWidget(tr("Master"), this);
|
QDockWidget *topWidget = new QDockWidget(tr("Master"), this);
|
||||||
topWidget->setAllowedAreas(Qt::TopDockWidgetArea);
|
topWidget->setAllowedAreas(Qt::TopDockWidgetArea);
|
||||||
topWidget->setWidget(m_dmxWidget);
|
topWidget->setWidget(m_dmxWidget);
|
||||||
|
topWidget->setContentsMargins(0, 0, 0, 0);
|
||||||
addDockWidget(Qt::TopDockWidgetArea, topWidget);
|
addDockWidget(Qt::TopDockWidgetArea, topWidget);
|
||||||
connect(ui.actionLaunch_OLA_Setup, SIGNAL(triggered()), this, SLOT(olasetup()));
|
connect(ui.actionLaunch_OLA_Setup, SIGNAL(triggered()), this, SLOT(olasetup()));
|
||||||
|
this->setContentsMargins(5, 5, 5, 5);
|
||||||
|
this->setStyleSheet(
|
||||||
|
"color: white;"
|
||||||
|
"background-color: gray;"
|
||||||
|
"selection-color: blue;"
|
||||||
|
"selection-background-color: green"
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
libreMediaServerAudioUi::~libreMediaServerAudioUi()
|
libreMediaServerAudioUi::~libreMediaServerAudioUi()
|
||||||
|
|
|
@ -1,19 +1,31 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<ui version="4.0">
|
<ui version="4.0">
|
||||||
<author>Santi Noreña belfegor@gmail.com</author>
|
<author>Santi Noreña lms@criptomart.net</author>
|
||||||
<class>LibreMediaServerAudio</class>
|
<class>LibreMediaServerAudio</class>
|
||||||
<widget class="QMainWindow" name="LibreMediaServer Audio">
|
<widget class="QMainWindow" name="LibreMediaServer Audio">
|
||||||
<property name="geometry">
|
<property name="geometry">
|
||||||
<rect>
|
<rect>
|
||||||
<x>0</x>
|
<x>0</x>
|
||||||
<y>0</y>
|
<y>0</y>
|
||||||
<width>114</width>
|
<width>800</width>
|
||||||
<height>218</height>
|
<height>800</height>
|
||||||
</rect>
|
</rect>
|
||||||
</property>
|
</property>
|
||||||
|
<property name="font">
|
||||||
|
<font>
|
||||||
|
<family>Unifont</family>
|
||||||
|
<pointsize>12</pointsize>
|
||||||
|
<weight>75</weight>
|
||||||
|
<bold>true</bold>
|
||||||
|
</font>
|
||||||
|
</property>
|
||||||
<property name="windowTitle">
|
<property name="windowTitle">
|
||||||
<string>LibreMediaServer</string>
|
<string>LibreMediaServer</string>
|
||||||
</property>
|
</property>
|
||||||
|
<property name="windowIcon">
|
||||||
|
<iconset>
|
||||||
|
<normaloff>../../../../criptomart/artwork/logo_v2_criptomart.net.png</normaloff>../../../../criptomart/artwork/logo_v2_criptomart.net.png</iconset>
|
||||||
|
</property>
|
||||||
<widget class="QWidget" name="centralwidget"/>
|
<widget class="QWidget" name="centralwidget"/>
|
||||||
<widget class="QMenuBar" name="menuBar">
|
<widget class="QMenuBar" name="menuBar">
|
||||||
<property name="geometry">
|
<property name="geometry">
|
||||||
|
@ -21,7 +33,7 @@
|
||||||
<x>0</x>
|
<x>0</x>
|
||||||
<y>0</y>
|
<y>0</y>
|
||||||
<width>114</width>
|
<width>114</width>
|
||||||
<height>22</height>
|
<height>21</height>
|
||||||
</rect>
|
</rect>
|
||||||
</property>
|
</property>
|
||||||
<widget class="QMenu" name="menuFile">
|
<widget class="QMenu" name="menuFile">
|
||||||
|
@ -32,47 +44,9 @@
|
||||||
</widget>
|
</widget>
|
||||||
<addaction name="menuFile"/>
|
<addaction name="menuFile"/>
|
||||||
</widget>
|
</widget>
|
||||||
<action name="actionExit">
|
|
||||||
<property name="text">
|
|
||||||
<string>Exit</string>
|
|
||||||
</property>
|
|
||||||
</action>
|
|
||||||
<action name="actionOpen_conf">
|
|
||||||
<property name="text">
|
|
||||||
<string>Open Configuration...</string>
|
|
||||||
</property>
|
|
||||||
</action>
|
|
||||||
<action name="actionSave_conf">
|
|
||||||
<property name="text">
|
|
||||||
<string>Save Configuration...</string>
|
|
||||||
</property>
|
|
||||||
</action>
|
|
||||||
<action name="action_Settings">
|
|
||||||
<property name="text">
|
|
||||||
<string>Settings...</string>
|
|
||||||
</property>
|
|
||||||
</action>
|
|
||||||
<action name="actionInitMSEX">
|
|
||||||
<property name="checkable">
|
|
||||||
<bool>false</bool>
|
|
||||||
</property>
|
|
||||||
<property name="text">
|
|
||||||
<string>Init</string>
|
|
||||||
</property>
|
|
||||||
</action>
|
|
||||||
<action name="actionIP_Address">
|
|
||||||
<property name="text">
|
|
||||||
<string>IP Address</string>
|
|
||||||
</property>
|
|
||||||
</action>
|
|
||||||
<action name="actionMake_Thumbs">
|
|
||||||
<property name="text">
|
|
||||||
<string>Make Thumbs</string>
|
|
||||||
</property>
|
|
||||||
</action>
|
|
||||||
<action name="actionLaunch_OLA_Setup">
|
<action name="actionLaunch_OLA_Setup">
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string>OLA Setup...</string>
|
<string>OLA Setup</string>
|
||||||
</property>
|
</property>
|
||||||
</action>
|
</action>
|
||||||
</widget>
|
</widget>
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
#include "slidergroup.h"
|
#include "slidergroup.h"
|
||||||
|
|
||||||
SliderGroup::SliderGroup(int min,
|
SliderGroup::SliderGroup(QString name,
|
||||||
|
int min,
|
||||||
int max,
|
int max,
|
||||||
int decimals,
|
int decimals,
|
||||||
QWidget *parent)
|
QWidget *parent)
|
||||||
|
@ -8,23 +9,43 @@ SliderGroup::SliderGroup(int min,
|
||||||
{
|
{
|
||||||
QVBoxLayout *layout = new QVBoxLayout;
|
QVBoxLayout *layout = new QVBoxLayout;
|
||||||
layout->setAlignment(Qt::AlignHCenter);
|
layout->setAlignment(Qt::AlignHCenter);
|
||||||
this->setMaximumWidth(65);
|
layout->setContentsMargins(0, 0, 0, 0);
|
||||||
|
//this->setMaximumWidth(40);
|
||||||
slider = new QSlider(Qt::Orientation::Vertical);
|
slider = new QSlider(Qt::Orientation::Vertical);
|
||||||
slider->setFocusPolicy(Qt::StrongFocus);
|
slider->setFocusPolicy(Qt::StrongFocus);
|
||||||
slider->setTickPosition(QSlider::TicksBothSides);
|
slider->setTickPosition(QSlider::TicksBothSides);
|
||||||
slider->setTickInterval((max - min) / 11);
|
slider->setTickInterval((max - min) / 11);
|
||||||
|
slider->setMinimumHeight(100);
|
||||||
slider->setSingleStep(1);
|
slider->setSingleStep(1);
|
||||||
slider->setRange(min, max);
|
slider->setRange(min, max);
|
||||||
slider->setMaximumWidth(65);
|
//slider->setMaximumWidth(40);
|
||||||
|
slider->setToolTip(name);
|
||||||
|
slider->setStyleSheet("QSlider {"
|
||||||
|
"border: 1px solid #999999;"
|
||||||
|
"margin: 0px;"
|
||||||
|
"height: 200px;"
|
||||||
|
"width: 40px;}"
|
||||||
|
);
|
||||||
|
slider->setContentsMargins(0, 0, 0, 0);
|
||||||
valueBox = new QDoubleSpinBox();
|
valueBox = new QDoubleSpinBox();
|
||||||
valueBox->setFocusPolicy(Qt::NoFocus);
|
valueBox->setFocusPolicy(Qt::NoFocus);
|
||||||
valueBox->setButtonSymbols(QAbstractSpinBox::NoButtons);
|
valueBox->setButtonSymbols(QAbstractSpinBox::NoButtons);
|
||||||
valueBox->setMaximumWidth(65);
|
//valueBox->setMaximumWidth(40);
|
||||||
valueBox->setRange(min, max);
|
valueBox->setRange(min, max);
|
||||||
valueBox->setDecimals(decimals);
|
valueBox->setDecimals(decimals);
|
||||||
|
valueBox->setObjectName(name);
|
||||||
|
valueBox->setToolTip(name);
|
||||||
|
valueBox->setAlignment(Qt::AlignHCenter);
|
||||||
|
valueBox->setContentsMargins(0, 0, 0, 0);
|
||||||
connect(slider, SIGNAL(valueChanged(int)), this, SLOT(sliderValueChanged(int)));
|
connect(slider, SIGNAL(valueChanged(int)), this, SLOT(sliderValueChanged(int)));
|
||||||
layout->addWidget(slider);
|
layout->addWidget(slider);
|
||||||
layout->addWidget(valueBox);
|
layout->addWidget(valueBox);
|
||||||
|
this->setStyleSheet("border: 1px solid #999999;"
|
||||||
|
"width: 40px;"
|
||||||
|
"margin: 0px;"
|
||||||
|
);
|
||||||
|
layout->setSpacing(0);
|
||||||
|
layout->setContentsMargins(0, 0, 0, 0);
|
||||||
this->setLayout(layout);
|
this->setLayout(layout);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -11,7 +11,8 @@ class SliderGroup : public QWidget
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
|
|
||||||
public:
|
public:
|
||||||
SliderGroup(int min,
|
SliderGroup(QString name,
|
||||||
|
int min,
|
||||||
int max,
|
int max,
|
||||||
int decimals,
|
int decimals,
|
||||||
QWidget *parent = nullptr);
|
QWidget *parent = nullptr);
|
||||||
|
|
Loading…
Add table
Reference in a new issue