في كيو تي كيف يمكنني الحصول على واضغط على زر لتحديد spinbox إلى قيمة معينة؟

StackOverflow https://stackoverflow.com/questions/815002

  •  03-07-2019
  •  | 
  •  

سؤال

وأنا أحاول الحصول على السيطرة على آلية إشارة وفتحات كيو تي في. لدي التطبيق مع QPushButton وQSpinBox. عندما اضغط على زر أريد spinbox للتغيير إلى 20. ما يشير الى وفتحة أحتاج لاقامة؟

ورمز أدناه يوضح التطبيق، وظيفة الاتصال هي واحدة أواجه مشكلة مع. كما أفهمها سوف setValue (الباحث) فتحة من QSpinBox لا تعمل هنا لأن النقر عليها () إشارة QPushButton على توقيع مختلف، وعلى أي حال كيف أمرر قيمة 20 إلى spinbox؟ أحتاج أن أكتب نوعا من وظيفة مساعد ليكون بمثابة فتحة التي تدعو spinbox-> setValue (20)؟ إذا كان الأمر كذلك، ما هو الشكل التي من شأنها أن تأخذ؟

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

    QWidget *window = new QWidget;
    QSpinBox *spinbox = new QSpinBox;
    QPushButton *button = new QPushButton("Set to 20");

    spinbox->setRange(0, 100);

    // What should I put below?
    QObject::connect(button, SIGNAL(clicked()), spinbox, SLOT(???????));

    QLayout *layout = new QHBoxLayout;
    layout->addWidget(spinbox);
    layout->addWidget(button);
    window->setLayout(layout);

    window->show();

    return app.exec();

}
هل كانت مفيدة؟

المحلول

ويمكنك أن تفعل:

class AuxSignals : public QObject
{
    Q_OBJECT
    ...
    signals:
        void valueChanged(int);
    public slots:
        void buttonClicked() { emit valueChanged(20); }
};

...

// On main.cpp
AuxSignals *auxSignals = new AuxSignals;

QObject::connect(button, SIGNAL(clicked()), auxSignal, SLOT(buttonClicked));
QObject::connect(auxSignals, SIGNAL(valueChanged(int)), spinbox, SLOT(setValue(int)));

أو

class AuxSignals : public QObject
{
    Q_OBJECT
    ...
    QSpinBox *m_spinBox;
    public:
        AuxSignals(QSpinBox *spinBox) : m_spinBox(spinBox) {}
    public slots:
        void buttonClicked() { m_spinBox->setValue(20); }
};

...

// On main.cpp
AuxSignals *auxSignals = new AuxSignals(spinBox);

QObject::connect(button, SIGNAL(clicked()), auxSignals, SLOT(buttonClicked()));

وأنا أفضل الخيار الأول لأنه لا يتطلب الطبقة AuxSignals أن يكون مؤشر إلى QWidget محددة.

نصائح أخرى

وأعتقد أنك تبحث في فتحة مخصصة هنا. وهناك إشارة QPushButton::clicked تعطي منطقية (true|false) الحدث. إذا قبض عليه باستخدام QSpinBox::setValue لن تذهب بعيدا جدا. وQSpinBox::setValue يتوقع عدد صحيح ومنطقي يحول المدخلات إلى 0 أو 1 حسب واقع الحال والزيادات spinbox الخاص بك عن طريق وحدة فقط 1. لو كنت لكتابة مخصصة SLOT يمكنك فعلا تعيين قيمة التمرير الدقيق مع أكثر بكثير السيطرة.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top