في كيو تي كيف يمكنني الحصول على واضغط على زر لتحديد spinbox إلى قيمة معينة؟
-
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
يمكنك فعلا تعيين قيمة التمرير الدقيق مع أكثر بكثير السيطرة.