Size: a a a

2020 April 13

М

Михаил in Qt
Renat Garaev
Если проэкранировать \% ?
Ошибка была в QML::FileDialog. Для декода путей надо использовать - decodeURIComponent(fileUrls[i])
источник

РБ

Руслан Багров in Qt
Руслан Багров
Добрый день, товарищи! Хочу соединить DoubleSpinBox и Horizontal Slider. На фото соединил SpinBox и Horizontal Slider, для DoubleSpinBox почему-то нет слота SetValue, кто-нибудь сталкивался с подобным?
Друзья, подскажите, пожалуйста, взял код со StackOverFlow, все понятно, за исключением класса Test. Насколько я понимаю, здесь создаётся слайдер как объект класса DoubleSlider, как мне поступить, если у меня уже создана готовая форма widget.ui и на неё помещён мой слайдер класса, естественно, QSlider ?
#include <QApplication>
#include <QtGui>
#include <QVBoxLayout>
#include <QSlider>
#include <QLabel>

class DoubleSlider : public QSlider {
   Q_OBJECT

public:
   DoubleSlider(QWidget *parent = 0) : QSlider(parent) {
       connect(this, SIGNAL(valueChanged(int)),
           this, SLOT(notifyValueChanged(int)));
   }

signals:
   void doubleValueChanged(double value);

public slots:
   void notifyValueChanged(int value) {
       double doubleValue = value / 10.0;
       emit doubleValueChanged(doubleValue);
   }
};

class Test : public QWidget {
   Q_OBJECT
public:
   Test(QWidget *parent = 0) : QWidget(parent),
       m_slider(new DoubleSlider()),
       m_label(new QLabel())
   {
       m_slider->setOrientation(Qt::Horizontal);
       m_slider->setRange(0, 100);
       QVBoxLayout *layout = new QVBoxLayout(this);
       layout->addWidget(m_slider);
       layout->addWidget(m_label);
       connect(m_slider, SIGNAL(doubleValueChanged(double)),
           this, SLOT(updateLabelValue(double)));
       updateLabelValue(m_slider->value());
   }

public slots:
   void updateLabelValue(double value) {
       m_label->setText(QString::number(value, 'f', 2));
   }

private:
   QSlider *m_slider;
   QLabel *m_label;
};

int main(int argc, char *argv[])
{
   QApplication a(argc, argv);

   Test *wid = new Test();
   wid->show();

   return a.exec();
}
источник

d0

dOzeR 007 in Qt
git_gud
Можно-ли как-то сохранить работоспособность кнопок после применения эффекта (OpacityMask в моем случае) к родительскому элементу, где эти кнопки лежат?
Код:
https://pastebin.com/8nbYMQ0U
А с чего ты решил что кнопки не работают?
источник

g

git_gud in Qt
dOzeR 007
А с чего ты решил что кнопки не работают?
ивенты не срабатывают
источник

d0

dOzeR 007 in Qt
git_gud
ивенты не срабатывают
печатает по клику
источник

g

git_gud in Qt
dOzeR 007
печатает по клику
это с OpacityMask примененым? Потому что у меня тоже самое не работает
источник

d0

dOzeR 007 in Qt
git_gud
это с OpacityMask примененым? Потому что у меня тоже самое не работает
ну да, код твой
источник

g

git_gud in Qt
dOzeR 007
ну да, код твой
А можешь прям полный код скинуть? А то мистика какая-то
источник

B

Bril in Qt
Руслан Багров
Друзья, подскажите, пожалуйста, взял код со StackOverFlow, все понятно, за исключением класса Test. Насколько я понимаю, здесь создаётся слайдер как объект класса DoubleSlider, как мне поступить, если у меня уже создана готовая форма widget.ui и на неё помещён мой слайдер класса, естественно, QSlider ?
#include <QApplication>
#include <QtGui>
#include <QVBoxLayout>
#include <QSlider>
#include <QLabel>

class DoubleSlider : public QSlider {
   Q_OBJECT

public:
   DoubleSlider(QWidget *parent = 0) : QSlider(parent) {
       connect(this, SIGNAL(valueChanged(int)),
           this, SLOT(notifyValueChanged(int)));
   }

signals:
   void doubleValueChanged(double value);

public slots:
   void notifyValueChanged(int value) {
       double doubleValue = value / 10.0;
       emit doubleValueChanged(doubleValue);
   }
};

class Test : public QWidget {
   Q_OBJECT
public:
   Test(QWidget *parent = 0) : QWidget(parent),
       m_slider(new DoubleSlider()),
       m_label(new QLabel())
   {
       m_slider->setOrientation(Qt::Horizontal);
       m_slider->setRange(0, 100);
       QVBoxLayout *layout = new QVBoxLayout(this);
       layout->addWidget(m_slider);
       layout->addWidget(m_label);
       connect(m_slider, SIGNAL(doubleValueChanged(double)),
           this, SLOT(updateLabelValue(double)));
       updateLabelValue(m_slider->value());
   }

public slots:
   void updateLabelValue(double value) {
       m_label->setText(QString::number(value, 'f', 2));
   }

private:
   QSlider *m_slider;
   QLabel *m_label;
};

int main(int argc, char *argv[])
{
   QApplication a(argc, argv);

   Test *wid = new Test();
   wid->show();

   return a.exec();
}
Тебе обязательно дробную часть в спинбоксе надо менять от слайдера, или задача просто их соединить?
Если просто соединить, то double и int вполне себе соединяются без проблем
источник

d0

dOzeR 007 in Qt
git_gud
А можешь прям полный код скинуть? А то мистика какая-то
import QtQuick 2.14
import QtQuick.Window 2.14
import QtQuick.Layouts 1.14
import QtGraphicalEffects 1.14
import QtQuick.Controls 2.14

Window {
   visible: true
   width: 640
   height: 480
   title: qsTr("Hello World")

   Rectangle {
       z: 10
       id: rect
       anchors.centerIn: parent;
       width: parent.width * .8; height: parent.height * .1
       color: "#33aa0000"
       visible: true
       radius: 10

       RowLayout {
           anchors.fill: parent
           spacing: 0

           Repeater {
               model: 3

               Button {
                   Layout.fillHeight: true
                   Layout.fillWidth: true

                   background: Rectangle {
                       color: "#ddd"
                       Rectangle {
                           anchors {
                               left: parent.left
                               right: parent.right
                               bottom: parent.bottom
                           }
                           height: 5
                           color: "blue"
                       }
                   }
                   onClicked: {
                       print( index );
                   }
               }
           }
       }
   }

   Rectangle {
       id: mask
       anchors.fill: rect
       radius: 10
       visible: false
   }

   OpacityMask {
       source: rect
       maskSource: mask
       anchors.fill: rect
   }
}
источник

g

git_gud in Qt
dOzeR 007
import QtQuick 2.14
import QtQuick.Window 2.14
import QtQuick.Layouts 1.14
import QtGraphicalEffects 1.14
import QtQuick.Controls 2.14

Window {
   visible: true
   width: 640
   height: 480
   title: qsTr("Hello World")

   Rectangle {
       z: 10
       id: rect
       anchors.centerIn: parent;
       width: parent.width * .8; height: parent.height * .1
       color: "#33aa0000"
       visible: true
       radius: 10

       RowLayout {
           anchors.fill: parent
           spacing: 0

           Repeater {
               model: 3

               Button {
                   Layout.fillHeight: true
                   Layout.fillWidth: true

                   background: Rectangle {
                       color: "#ddd"
                       Rectangle {
                           anchors {
                               left: parent.left
                               right: parent.right
                               bottom: parent.bottom
                           }
                           height: 5
                           color: "blue"
                       }
                   }
                   onClicked: {
                       print( index );
                   }
               }
           }
       }
   }

   Rectangle {
       id: mask
       anchors.fill: rect
       radius: 10
       visible: false
   }

   OpacityMask {
       source: rect
       maskSource: mask
       anchors.fill: rect
   }
}
там у rect visible: true стоит, поэтому у тебя и работает
источник

РБ

Руслан Багров in Qt
Bril
Тебе обязательно дробную часть в спинбоксе надо менять от слайдера, или задача просто их соединить?
Если просто соединить, то double и int вполне себе соединяются без проблем
Спасибо, что откликнулся 🙏
Желательно менять
источник

g

git_gud in Qt
в пасте в оригинале false, если true поставить - тогда оригинал, и эффект наложатся друг на друга
источник

РБ

Руслан Багров in Qt
Bril
Тебе обязательно дробную часть в спинбоксе надо менять от слайдера, или задача просто их соединить?
Если просто соединить, то double и int вполне себе соединяются без проблем
А как можно хотя бы сделать как ты описал?
источник

d0

dOzeR 007 in Qt
git_gud
там у rect visible: true стоит, поэтому у тебя и работает
а ну да, я смотрел что ты за хитрые кнопки создаешь, а тебе конкретно чего добиться надо?
источник

g

git_gud in Qt
dOzeR 007
а ну да, я смотрел что ты за хитрые кнопки создаешь, а тебе конкретно чего добиться надо?
закруглить края контейнера и его содержимого
источник

B

Bril in Qt
Руслан Багров
А как можно хотя бы сделать как ты описал?
Можно просто с лямбдой сделать, тогда будет и дробная часть меняться
connect(ui->horizontalSlider, &QSlider::valueChanged, [=](int val){
               ui->doubleSpinBox->setValue(qreal(val / 10.0));
           });
источник

AB

Alex B. in Qt
Никто случайно не сталкивался с определением темы в винде? Темная-светлая
источник

РБ

Руслан Багров in Qt
Bril
Можно просто с лямбдой сделать, тогда будет и дробная часть меняться
connect(ui->horizontalSlider, &QSlider::valueChanged, [=](int val){
               ui->doubleSpinBox->setValue(qreal(val / 10.0));
           });
Спасибо)👍
источник

РБ

Руслан Багров in Qt
Bril
Можно просто с лямбдой сделать, тогда будет и дробная часть меняться
connect(ui->horizontalSlider, &QSlider::valueChanged, [=](int val){
               ui->doubleSpinBox->setValue(qreal(val / 10.0));
           });
Все работает)🙏
источник