mirror of
https://bitbucket.org/librepilot/librepilot.git
synced 2025-02-20 10:54:14 +01:00
LP-390 Tx wizard: identifyLimits, save only when needed - Prevent Rx glitches - Fixes for Output and Hardware pages
This commit is contained in:
parent
b16e4838eb
commit
b33d655ec2
@ -2,7 +2,7 @@
|
|||||||
******************************************************************************
|
******************************************************************************
|
||||||
*
|
*
|
||||||
* @file configinputwidget.cpp
|
* @file configinputwidget.cpp
|
||||||
* @author The LibrePilot Project, http://www.librepilot.org Copyright (C) 2015.
|
* @author The LibrePilot Project, http://www.librepilot.org Copyright (C) 2015-2016.
|
||||||
* The OpenPilot Team, http://www.openpilot.org Copyright (C) 2010.
|
* The OpenPilot Team, http://www.openpilot.org Copyright (C) 2010.
|
||||||
* @addtogroup GCSPlugins GCS Plugins
|
* @addtogroup GCSPlugins GCS Plugins
|
||||||
* @{
|
* @{
|
||||||
@ -31,6 +31,7 @@
|
|||||||
#include <extensionsystem/pluginmanager.h>
|
#include <extensionsystem/pluginmanager.h>
|
||||||
#include <coreplugin/generalsettings.h>
|
#include <coreplugin/generalsettings.h>
|
||||||
#include <utils/stylehelper.h>
|
#include <utils/stylehelper.h>
|
||||||
|
#include <uavobjecthelper.h>
|
||||||
|
|
||||||
#include "ui_input.h"
|
#include "ui_input.h"
|
||||||
#include "ui_input_wizard.h"
|
#include "ui_input_wizard.h"
|
||||||
@ -61,6 +62,9 @@
|
|||||||
#define STICK_MIN_MOVE -8
|
#define STICK_MIN_MOVE -8
|
||||||
#define STICK_MAX_MOVE 8
|
#define STICK_MAX_MOVE 8
|
||||||
|
|
||||||
|
#define MIN_INPUT_US 100
|
||||||
|
#define MAX_INPUT_US 2500
|
||||||
|
|
||||||
#define CHANNEL_NUMBER_NONE 0
|
#define CHANNEL_NUMBER_NONE 0
|
||||||
#define DEFAULT_FLIGHT_MODE_NUMBER 0
|
#define DEFAULT_FLIGHT_MODE_NUMBER 0
|
||||||
|
|
||||||
@ -839,6 +843,10 @@ void ConfigInputWidget::wizardSetUpStep(enum wizardSteps step)
|
|||||||
manualSettingsData.ChannelMax[i] = manualSettingsData.ChannelNeutral[i];
|
manualSettingsData.ChannelMax[i] = manualSettingsData.ChannelNeutral[i];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
UAVObjectUpdaterHelper updateHelper;
|
||||||
|
manualSettingsObj->setData(manualSettingsData, false);
|
||||||
|
updateHelper.doObjectAndWait(manualSettingsObj);
|
||||||
|
|
||||||
connect(manualCommandObj, SIGNAL(objectUpdated(UAVObject *)), this, SLOT(identifyLimits()));
|
connect(manualCommandObj, SIGNAL(objectUpdated(UAVObject *)), this, SLOT(identifyLimits()));
|
||||||
connect(manualCommandObj, SIGNAL(objectUpdated(UAVObject *)), this, SLOT(moveSticks()));
|
connect(manualCommandObj, SIGNAL(objectUpdated(UAVObject *)), this, SLOT(moveSticks()));
|
||||||
connect(flightStatusObj, SIGNAL(objectUpdated(UAVObject *)), this, SLOT(moveSticks()));
|
connect(flightStatusObj, SIGNAL(objectUpdated(UAVObject *)), this, SLOT(moveSticks()));
|
||||||
@ -881,6 +889,8 @@ void ConfigInputWidget::wizardSetUpStep(enum wizardSteps step)
|
|||||||
|
|
||||||
void ConfigInputWidget::wizardTearDownStep(enum wizardSteps step)
|
void ConfigInputWidget::wizardTearDownStep(enum wizardSteps step)
|
||||||
{
|
{
|
||||||
|
UAVObjectUpdaterHelper updateHelper;
|
||||||
|
|
||||||
Q_ASSERT(step == wizardStep);
|
Q_ASSERT(step == wizardStep);
|
||||||
switch (step) {
|
switch (step) {
|
||||||
case wizardWelcome:
|
case wizardWelcome:
|
||||||
@ -935,7 +945,8 @@ void ConfigInputWidget::wizardTearDownStep(enum wizardSteps step)
|
|||||||
manualSettingsData.ChannelNeutral[i] = manualCommandData.Channel[i];
|
manualSettingsData.ChannelNeutral[i] = manualCommandData.Channel[i];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
manualSettingsObj->setData(manualSettingsData);
|
manualSettingsObj->setData(manualSettingsData, false);
|
||||||
|
updateHelper.doObjectAndWait(manualSettingsObj);
|
||||||
setTxMovement(nothing);
|
setTxMovement(nothing);
|
||||||
break;
|
break;
|
||||||
case wizardIdentifyLimits:
|
case wizardIdentifyLimits:
|
||||||
@ -943,7 +954,8 @@ void ConfigInputWidget::wizardTearDownStep(enum wizardSteps step)
|
|||||||
disconnect(manualCommandObj, SIGNAL(objectUpdated(UAVObject *)), this, SLOT(moveSticks()));
|
disconnect(manualCommandObj, SIGNAL(objectUpdated(UAVObject *)), this, SLOT(moveSticks()));
|
||||||
disconnect(flightStatusObj, SIGNAL(objectUpdated(UAVObject *)), this, SLOT(moveSticks()));
|
disconnect(flightStatusObj, SIGNAL(objectUpdated(UAVObject *)), this, SLOT(moveSticks()));
|
||||||
disconnect(accessoryDesiredObj0, SIGNAL(objectUpdated(UAVObject *)), this, SLOT(moveSticks()));
|
disconnect(accessoryDesiredObj0, SIGNAL(objectUpdated(UAVObject *)), this, SLOT(moveSticks()));
|
||||||
manualSettingsObj->setData(manualSettingsData);
|
manualSettingsObj->setData(manualSettingsData, false);
|
||||||
|
updateHelper.doObjectAndWait(manualSettingsObj);
|
||||||
setTxMovement(nothing);
|
setTxMovement(nothing);
|
||||||
break;
|
break;
|
||||||
case wizardIdentifyInverted:
|
case wizardIdentifyInverted:
|
||||||
@ -1178,59 +1190,77 @@ void ConfigInputWidget::identifyControls()
|
|||||||
|
|
||||||
void ConfigInputWidget::identifyLimits()
|
void ConfigInputWidget::identifyLimits()
|
||||||
{
|
{
|
||||||
|
uint16_t inputValue;
|
||||||
|
bool newLimitValue = false;
|
||||||
|
bool newFlightModeValue = false;
|
||||||
|
|
||||||
manualCommandData = manualCommandObj->getData();
|
manualCommandData = manualCommandObj->getData();
|
||||||
for (uint i = 0; i < ManualControlSettings::CHANNELMAX_NUMELEM; ++i) {
|
for (uint i = 0; i < ManualControlSettings::CHANNELMAX_NUMELEM; ++i) {
|
||||||
if (manualSettingsData.ChannelMin[i] <= manualSettingsData.ChannelMax[i]) {
|
inputValue = manualCommandData.Channel[i];
|
||||||
// Non inverted channel
|
// Check if channel is already detected and prevent glitches
|
||||||
if (manualSettingsData.ChannelMin[i] > manualCommandData.Channel[i]) {
|
if ((manualSettingsData.ChannelNumber[i] != CHANNEL_NUMBER_NONE) &&
|
||||||
manualSettingsData.ChannelMin[i] = manualCommandData.Channel[i];
|
(inputValue > MIN_INPUT_US) && (inputValue < MAX_INPUT_US)) {
|
||||||
|
if (manualSettingsData.ChannelMin[i] <= manualSettingsData.ChannelMax[i]) {
|
||||||
|
// Non inverted channel
|
||||||
|
if (manualSettingsData.ChannelMin[i] > inputValue) {
|
||||||
|
manualSettingsData.ChannelMin[i] = inputValue;
|
||||||
|
newLimitValue = true;
|
||||||
|
}
|
||||||
|
if (manualSettingsData.ChannelMax[i] < inputValue) {
|
||||||
|
manualSettingsData.ChannelMax[i] = inputValue;
|
||||||
|
newLimitValue = true;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
// Inverted channel
|
||||||
|
if (manualSettingsData.ChannelMax[i] > inputValue) {
|
||||||
|
manualSettingsData.ChannelMax[i] = inputValue;
|
||||||
|
newLimitValue = true;
|
||||||
|
}
|
||||||
|
if (manualSettingsData.ChannelMin[i] < inputValue) {
|
||||||
|
manualSettingsData.ChannelMin[i] = inputValue;
|
||||||
|
newLimitValue = true;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if (manualSettingsData.ChannelMax[i] < manualCommandData.Channel[i]) {
|
// Flightmode channel
|
||||||
manualSettingsData.ChannelMax[i] = manualCommandData.Channel[i];
|
if (i == ManualControlSettings::CHANNELGROUPS_FLIGHTMODE) {
|
||||||
}
|
// Avoid duplicate values too close and error due to RcTx drift
|
||||||
} else {
|
int minSpacing = 100; // 100µs
|
||||||
// Inverted channel
|
for (int pos = 0; pos < manualSettingsData.FlightModeNumber + 1; ++pos) {
|
||||||
if (manualSettingsData.ChannelMax[i] > manualCommandData.Channel[i]) {
|
if (flightModeSignalValue[pos] == 0) {
|
||||||
manualSettingsData.ChannelMax[i] = manualCommandData.Channel[i];
|
newFlightModeValue = true;
|
||||||
}
|
// A new flightmode value can be set now
|
||||||
if (manualSettingsData.ChannelMin[i] < manualCommandData.Channel[i]) {
|
for (int checkpos = 0; checkpos < manualSettingsData.FlightModeNumber + 1; ++checkpos) {
|
||||||
manualSettingsData.ChannelMin[i] = manualCommandData.Channel[i];
|
// Check if value is already used, MinSpacing needed between values.
|
||||||
}
|
if ((flightModeSignalValue[checkpos] < inputValue + minSpacing) &&
|
||||||
}
|
(flightModeSignalValue[checkpos] > inputValue - minSpacing)) {
|
||||||
// Flightmode channel
|
newFlightModeValue = false;
|
||||||
if (i == ManualControlSettings::CHANNELGROUPS_FLIGHTMODE) {
|
}
|
||||||
bool newFlightModeValue = true;
|
|
||||||
// Avoid duplicate values too close and error due to RcTx drift
|
|
||||||
int minSpacing = 100; // 100µs
|
|
||||||
for (int pos = 0; pos < manualSettingsData.FlightModeNumber + 1; ++pos) {
|
|
||||||
if (flightModeSignalValue[pos] == 0) {
|
|
||||||
// A new flightmode value can be set now
|
|
||||||
for (int checkpos = 0; checkpos < manualSettingsData.FlightModeNumber + 1; ++checkpos) {
|
|
||||||
// Check if value is already used, MinSpacing needed between values.
|
|
||||||
if ((flightModeSignalValue[checkpos] < manualCommandData.Channel[i] + minSpacing) &&
|
|
||||||
(flightModeSignalValue[checkpos] > manualCommandData.Channel[i] - minSpacing)) {
|
|
||||||
newFlightModeValue = false;
|
|
||||||
}
|
}
|
||||||
}
|
// Be sure FlightModeNumber is < FlightModeSettings::FLIGHTMODEPOSITION_NUMELEM (6)
|
||||||
// Be sure FlightModeNumber is < FlightModeSettings::FLIGHTMODEPOSITION_NUMELEM (6)
|
if ((manualSettingsData.FlightModeNumber < FlightModeSettings::FLIGHTMODEPOSITION_NUMELEM) && newFlightModeValue) {
|
||||||
if ((manualSettingsData.FlightModeNumber < FlightModeSettings::FLIGHTMODEPOSITION_NUMELEM) && newFlightModeValue) {
|
// Start from 0, erase previous count
|
||||||
// Start from 0, erase previous count
|
if (pos == 0) {
|
||||||
if (pos == 0) {
|
manualSettingsData.FlightModeNumber = 0;
|
||||||
manualSettingsData.FlightModeNumber = 0;
|
}
|
||||||
|
// Store new value and increase FlightModeNumber
|
||||||
|
flightModeSignalValue[pos] = inputValue;
|
||||||
|
manualSettingsData.FlightModeNumber++;
|
||||||
|
// Show flight mode number
|
||||||
|
m_txFlightModeCountText->setText(QString().number(manualSettingsData.FlightModeNumber));
|
||||||
|
m_txFlightModeCountText->setVisible(true);
|
||||||
|
m_txFlightModeCountBG->setVisible(true);
|
||||||
}
|
}
|
||||||
// Store new value and increase FlightModeNumber
|
|
||||||
flightModeSignalValue[pos] = manualCommandData.Channel[i];
|
|
||||||
manualSettingsData.FlightModeNumber++;
|
|
||||||
// Show flight mode number
|
|
||||||
m_txFlightModeCountText->setText(QString().number(manualSettingsData.FlightModeNumber));
|
|
||||||
m_txFlightModeCountText->setVisible(true);
|
|
||||||
m_txFlightModeCountBG->setVisible(true);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
manualSettingsObj->setData(manualSettingsData);
|
// Save only if something changed
|
||||||
|
if (newLimitValue || newFlightModeValue) {
|
||||||
|
UAVObjectUpdaterHelper updateHelper;
|
||||||
|
manualSettingsObj->setData(manualSettingsData, false);
|
||||||
|
updateHelper.doObjectAndWait(manualSettingsObj);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void ConfigInputWidget::setMoveFromCommand(int command)
|
void ConfigInputWidget::setMoveFromCommand(int command)
|
||||||
@ -1671,7 +1701,9 @@ void ConfigInputWidget::invertControls()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
manualSettingsObj->setData(manualSettingsData);
|
UAVObjectUpdaterHelper updateHelper;
|
||||||
|
manualSettingsObj->setData(manualSettingsData, false);
|
||||||
|
updateHelper.doObjectAndWait(manualSettingsObj);
|
||||||
}
|
}
|
||||||
|
|
||||||
void ConfigInputWidget::moveFMSlider()
|
void ConfigInputWidget::moveFMSlider()
|
||||||
@ -1922,8 +1954,9 @@ void ConfigInputWidget::updateCalibration()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
UAVObjectUpdaterHelper updateHelper;
|
||||||
manualSettingsObj->setData(manualSettingsData);
|
manualSettingsObj->setData(manualSettingsData, false);
|
||||||
|
updateHelper.doObjectAndWait(manualSettingsObj);
|
||||||
manualSettingsObj->updated();
|
manualSettingsObj->updated();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2067,7 +2100,9 @@ void ConfigInputWidget::resetChannelSettings()
|
|||||||
for (unsigned int channel = 0; channel < ManualControlSettings::CHANNELNUMBER_NUMELEM; channel++) {
|
for (unsigned int channel = 0; channel < ManualControlSettings::CHANNELNUMBER_NUMELEM; channel++) {
|
||||||
manualSettingsData.ChannelGroups[channel] = ManualControlSettings::CHANNELGROUPS_NONE;
|
manualSettingsData.ChannelGroups[channel] = ManualControlSettings::CHANNELGROUPS_NONE;
|
||||||
manualSettingsData.ChannelNumber[channel] = CHANNEL_NUMBER_NONE;
|
manualSettingsData.ChannelNumber[channel] = CHANNEL_NUMBER_NONE;
|
||||||
manualSettingsObj->setData(manualSettingsData);
|
UAVObjectUpdaterHelper updateHelper;
|
||||||
|
manualSettingsObj->setData(manualSettingsData, false);
|
||||||
|
updateHelper.doObjectAndWait(manualSettingsObj);
|
||||||
}
|
}
|
||||||
resetFlightModeSettings();
|
resetFlightModeSettings();
|
||||||
}
|
}
|
||||||
@ -2076,7 +2111,9 @@ void ConfigInputWidget::resetFlightModeSettings()
|
|||||||
{
|
{
|
||||||
// Reset FlightMode settings
|
// Reset FlightMode settings
|
||||||
manualSettingsData.FlightModeNumber = DEFAULT_FLIGHT_MODE_NUMBER;
|
manualSettingsData.FlightModeNumber = DEFAULT_FLIGHT_MODE_NUMBER;
|
||||||
manualSettingsObj->setData(manualSettingsData);
|
UAVObjectUpdaterHelper updateHelper;
|
||||||
|
manualSettingsObj->setData(manualSettingsData, false);
|
||||||
|
updateHelper.doObjectAndWait(manualSettingsObj);
|
||||||
for (uint8_t pos = 0; pos < FlightModeSettings::FLIGHTMODEPOSITION_NUMELEM; pos++) {
|
for (uint8_t pos = 0; pos < FlightModeSettings::FLIGHTMODEPOSITION_NUMELEM; pos++) {
|
||||||
flightModeSignalValue[pos] = 0;
|
flightModeSignalValue[pos] = 0;
|
||||||
}
|
}
|
||||||
@ -2110,7 +2147,9 @@ void ConfigInputWidget::resetActuatorSettings()
|
|||||||
actuatorSettingsData.ChannelMin[output] = 1500;
|
actuatorSettingsData.ChannelMin[output] = 1500;
|
||||||
actuatorSettingsData.ChannelNeutral[output] = 1500;
|
actuatorSettingsData.ChannelNeutral[output] = 1500;
|
||||||
}
|
}
|
||||||
actuatorSettingsObj->setData(actuatorSettingsData);
|
UAVObjectUpdaterHelper updateHelper;
|
||||||
|
actuatorSettingsObj->setData(actuatorSettingsData, false);
|
||||||
|
updateHelper.doObjectAndWait(actuatorSettingsObj);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -37,6 +37,7 @@
|
|||||||
#include "uavsettingsimportexport/uavsettingsimportexportfactory.h"
|
#include "uavsettingsimportexport/uavsettingsimportexportfactory.h"
|
||||||
#include <extensionsystem/pluginmanager.h>
|
#include <extensionsystem/pluginmanager.h>
|
||||||
#include <coreplugin/generalsettings.h>
|
#include <coreplugin/generalsettings.h>
|
||||||
|
#include <uavobjecthelper.h>
|
||||||
|
|
||||||
#include "mixersettings.h"
|
#include "mixersettings.h"
|
||||||
#include "actuatorcommand.h"
|
#include "actuatorcommand.h"
|
||||||
@ -459,7 +460,9 @@ void ConfigOutputWidget::updateObjectsFromWidgets()
|
|||||||
ActuatorSettings::MOTORSSPINWHILEARMED_FALSE;
|
ActuatorSettings::MOTORSSPINWHILEARMED_FALSE;
|
||||||
|
|
||||||
// Apply settings
|
// Apply settings
|
||||||
actuatorSettings->setData(actuatorSettingsData);
|
UAVObjectUpdaterHelper updateHelper;
|
||||||
|
actuatorSettings->setData(actuatorSettingsData, false);
|
||||||
|
updateHelper.doObjectAndWait(actuatorSettings);
|
||||||
}
|
}
|
||||||
|
|
||||||
FlightModeSettings *flightModeSettings = FlightModeSettings::GetInstance(getObjectManager());
|
FlightModeSettings *flightModeSettings = FlightModeSettings::GetInstance(getObjectManager());
|
||||||
|
@ -31,6 +31,7 @@
|
|||||||
|
|
||||||
#include <extensionsystem/pluginmanager.h>
|
#include <extensionsystem/pluginmanager.h>
|
||||||
#include <coreplugin/generalsettings.h>
|
#include <coreplugin/generalsettings.h>
|
||||||
|
#include <uavobjecthelper.h>
|
||||||
|
|
||||||
#include "hwsettings.h"
|
#include "hwsettings.h"
|
||||||
|
|
||||||
@ -131,7 +132,9 @@ void ConfigRevoHWWidget::updateObjectsFromWidgets()
|
|||||||
data.OptionalModules[HwSettings::OPTIONALMODULES_GPS] = HwSettings::OPTIONALMODULES_DISABLED;
|
data.OptionalModules[HwSettings::OPTIONALMODULES_GPS] = HwSettings::OPTIONALMODULES_DISABLED;
|
||||||
}
|
}
|
||||||
|
|
||||||
hwSettings->setData(data);
|
UAVObjectUpdaterHelper updateHelper;
|
||||||
|
hwSettings->setData(data, false);
|
||||||
|
updateHelper.doObjectAndWait(hwSettings);
|
||||||
}
|
}
|
||||||
|
|
||||||
void ConfigRevoHWWidget::usbVCPPortChanged(int index)
|
void ConfigRevoHWWidget::usbVCPPortChanged(int index)
|
||||||
|
@ -31,6 +31,7 @@
|
|||||||
|
|
||||||
#include <extensionsystem/pluginmanager.h>
|
#include <extensionsystem/pluginmanager.h>
|
||||||
#include <coreplugin/generalsettings.h>
|
#include <coreplugin/generalsettings.h>
|
||||||
|
#include <uavobjecthelper.h>
|
||||||
|
|
||||||
#include "hwsettings.h"
|
#include "hwsettings.h"
|
||||||
|
|
||||||
@ -124,7 +125,9 @@ void ConfigRevoNanoHWWidget::updateObjectsFromWidgets()
|
|||||||
data.OptionalModules[HwSettings::OPTIONALMODULES_GPS] = HwSettings::OPTIONALMODULES_DISABLED;
|
data.OptionalModules[HwSettings::OPTIONALMODULES_GPS] = HwSettings::OPTIONALMODULES_DISABLED;
|
||||||
}
|
}
|
||||||
|
|
||||||
hwSettings->setData(data);
|
UAVObjectUpdaterHelper updateHelper;
|
||||||
|
hwSettings->setData(data, false);
|
||||||
|
updateHelper.doObjectAndWait(hwSettings);
|
||||||
}
|
}
|
||||||
|
|
||||||
void ConfigRevoNanoHWWidget::usbVCPPortChanged(int index)
|
void ConfigRevoNanoHWWidget::usbVCPPortChanged(int index)
|
||||||
|
@ -31,6 +31,7 @@
|
|||||||
|
|
||||||
#include <extensionsystem/pluginmanager.h>
|
#include <extensionsystem/pluginmanager.h>
|
||||||
#include <coreplugin/generalsettings.h>
|
#include <coreplugin/generalsettings.h>
|
||||||
|
#include <uavobjecthelper.h>
|
||||||
|
|
||||||
#include "hwsettings.h"
|
#include "hwsettings.h"
|
||||||
|
|
||||||
@ -126,7 +127,9 @@ void ConfigSparky2HWWidget::updateObjectsFromWidgets()
|
|||||||
data.OptionalModules[HwSettings::OPTIONALMODULES_GPS] = HwSettings::OPTIONALMODULES_DISABLED;
|
data.OptionalModules[HwSettings::OPTIONALMODULES_GPS] = HwSettings::OPTIONALMODULES_DISABLED;
|
||||||
}
|
}
|
||||||
|
|
||||||
hwSettings->setData(data);
|
UAVObjectUpdaterHelper updateHelper;
|
||||||
|
hwSettings->setData(data, false);
|
||||||
|
updateHelper.doObjectAndWait(hwSettings);
|
||||||
}
|
}
|
||||||
|
|
||||||
void ConfigSparky2HWWidget::usbVCPPortChanged(int index)
|
void ConfigSparky2HWWidget::usbVCPPortChanged(int index)
|
||||||
|
@ -91,8 +91,8 @@ void InputChannelForm::updateNeutralMark()
|
|||||||
|
|
||||||
ui->channelNeutral->setStyleSheet(
|
ui->channelNeutral->setStyleSheet(
|
||||||
"QSlider::groove:horizontal { border: 1px solid rgb(196, 196, 196); margin: 0px 23px 0px 23px; height: 6px; border-radius: 2px; "
|
"QSlider::groove:horizontal { border: 1px solid rgb(196, 196, 196); margin: 0px 23px 0px 23px; height: 6px; border-radius: 2px; "
|
||||||
"background: qlineargradient(x1:0, y1:0, x2:1, y2:0, stop:" + QString::number(neutralPosition - 0.01) + " transparent, stop:"
|
"background: qlineargradient(x1:0, y1:0, x2:1, y2:0, stop:" + QString::number(qBound(0., neutralPosition - 0.01, 1.)) + " transparent, stop:"
|
||||||
+ QString::number(neutralPosition) + " red, stop:" + QString::number(neutralPosition + 0.01) + " transparent); }"
|
+ QString::number(qBound<double>(0., neutralPosition, 1.)) + " red, stop:" + QString::number(qBound(0., neutralPosition + 0.01, 1.)) + " transparent); }"
|
||||||
"QSlider::add-page:horizontal { background: rgba(255,255,255,120); border: 1px solid #777; margin: 0px 23px 0px 2px; border-radius: 4px; }"
|
"QSlider::add-page:horizontal { background: rgba(255,255,255,120); border: 1px solid #777; margin: 0px 23px 0px 2px; border-radius: 4px; }"
|
||||||
"QSlider::sub-page:horizontal { background: rgba(78,147,246,120); border: 1px solid #777; margin: 0px 2px 0px 23px; border-radius: 4px; }"
|
"QSlider::sub-page:horizontal { background: rgba(78,147,246,120); border: 1px solid #777; margin: 0px 2px 0px 23px; border-radius: 4px; }"
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user