ورود

View Full Version : مشکل در سیگنال ـ اسلات متوالی



2020s1371
چهارشنبه 23 مهر 1393, 14:27 عصر
سلام
با این کد:


int a=5,b=10;
QWidget *wd =new QWidget;
QVBoxLayout *vb=new QVBoxLayout;
for(int i=0;i<a;i++)
{


QHBoxLayout *hb=new QHBoxLayout(this);
hb->setObjectName("hb_"+QString::number(i));
for (int j = 0; j < b; j++)
{
QSlider *sl=new QSlider;
sl->setObjectName("sl_"+QString::number(i)+"_"+QString::number(j));
hb->addWidget(sl);
}
vb->addLayout(hb);
}
//**************************************** محل اضافه شدن کد پایینی
wd->setLayout(vb);
wd->show();
به این نتیجه ی اجرایی میرسم:

124552
حالا میخام سیگنال و اسلات هاش رو طوری بنویسم که هر کدوم از اسلایدر ها بتونه بعدیش رو تغییر بده! یعنی با تغییر اولی بالاسمت چپ ، همه شون عددشون تغییر کنه... با تغییر دومی بالا سمت چپ ، همه بجز اولی تغییر کنن و الخ

حالا چیزی که نوشتم اینه:

for(int i=0;i<a;i++)
{
QSlider *sld;
sld->setObjectName("sl_"+QString::number(i)+"_1");
for (int j = 0; j < b; j++)
{
QSlider *sl;
sl->setObjectName("sl_"+QString::number(i)+"_"+QString::number(j));
QObject::connect(sld,SIGNAL(sliderMoved(int)),sl,S LOT(setValue(int)));
}
}


حالا مشکل اینی که نوشتم چیه که جواب نمیده!

مشکل نوع سیگنال و نوع اسلاتش نیست،بیشتر مشکل طرز نوشتنشه..
(هرچند اینی که نوشتم اولین اسلایدر هر سطر رو به بقیه ی اسلایدر های اون سطر باید وصل کنه)

حامد مصافی
پنج شنبه 24 مهر 1393, 08:51 صبح
هر اسلایدر رو فقط به بعذیش وصل کن. این کدی هم که نوشتی اشتباهه، دیگه اسلایدر جدید تعریف نکن

2020s1371
پنج شنبه 24 مهر 1393, 11:24 صبح
هر اسلایدر رو فقط به بعذیش وصل کن. این کدی هم که نوشتی اشتباهه، دیگه اسلایدر جدید تعریف نکن

منم میخام با این کد همینکار رو بکنم ولی نمیدونم چجوری بش بگم فلان کار رو بکن
چون حتی تو وصل کردن اولی به دومی هم همین ایراد برقراره مثلا وقتی مینویسم sl_0_0 رو به sl_0_1 وصل کن میگه همچین چیزایی تعریف نشده و تو این scop نیس!

بازم تلاشمو میکنم
اگه میشه یه مدار بیشتر توضیح بدین

حامد مصافی
پنج شنبه 24 مهر 1393, 20:40 عصر
اینو بدون کامپایلر در NOTEPAD نوشام. زحمت تست با شما
int a=5,b=10;
QWidget *wd =new QWidget;
QVBoxLayout *vb=new QVBoxLayout;
for(int i=0;i<a;i++) {
QHBoxLayout *hb=new QHBoxLayout(this);
hb->setObjectName("hb_"+QString::number(i));
QSlider *prevSlider = 0;
for (int j = 0; j < b; j++){
QSlider *sl=new QSlider;
sl->setObjectName("sl_"+QString::number(i)+"_"+QStrin g::number(j));
hb->addWidget(sl);

if(prevSlider)
connect(prevSlider, SIGNAL(sliderMoved(int)), sl, SLOT(setValue(int)));


prevSlider = sl;
}
vb->addLayout(hb);
}


wd->setLayout(vb);
wd->show();

2020s1371
جمعه 25 مهر 1393, 08:24 صبح
ممنون از راهنمایی هاتون
این کد درست اجرا میشه ولی فقط داره در هر سطر هر اسلایدر رو فقط به قبلیش وصل میکنه

سوال: چرا برابر صفر؟

QSlider *prevSlider = 0;
فکرکنم جواب سوالم باید if داخلی باشه

سوال: انتظار داشتم با کامنت کردن خط زیر لااقل هر اولین اسلایدر هر سطر به مابقی اون سطر وصل بشه. انتظارم اشتباهه؟

prevSlider = sl;

سعی کردم که توی یه آرایه دو بعدی به ابعاد a ,b و یا یه Qlist اسلایدر ها رو ذخیره کنم ولی نمیشه ... اگه بتونیم این کار رو بکنیم فکر کنم بیشتر مشکل حله!