ورود

View Full Version : چگونه یک سیگنال را از یک کلاس به کلاس دیگری که در آن فراخانی کرده ایم ارسال کنیم؟



armintirand
چهارشنبه 25 بهمن 1391, 13:48 عصر
سلام
من یک برنامه نوشتم که چنتاتب داره که هر تب یک کلاسه و کل برنامه هم یک کلاسه که که من میخام توی هر تب کاربر چیزایی رو که وارد کرد طی یک عملیاتی مصلا ثبت در پایگاه داده یا ... نتیجه توی statusbar نشون داده بشه و باید از اون تب سیگنالی ارسال بشه به کلاش اصلی برنامه تا اونجا توی نوار وضعیت نشون داده بشه.
اگه ممکنه یک تیکه کد کوچیک بدون استفاده از دیزاینر برام بذارین.
ممنون

حامد مصافی
پنج شنبه 26 بهمن 1391, 17:27 عصر
برای هر تب یک سیگنال (مثلاً با امضای زیر) تعریف کن

signals:
void updateStatusBar(QString);

حالا در هر جایی از این کلاس که باید متن استاتوس‌بار عوض شود کد زیر را به کار ببر:

emit updateStatusBar("MY NEW MESSAGE);

حالا اینطرف در فرم اصلی یک اسلات مثلا با نام زیر تعریف کن:

public slots:
void tab_updateStatusBar(QString);


هنگام افزودن یک تب جدید:


MyTab tab = new MyTab();
//init tab
//add tab to tab bar
connect(tab, SIGNAL(updateStatusBar(QString), this, SLOT(tab_updateStatusBar(QString)));


حالا می‌توانی در پیاده سازی این اسلات کار مورد نطر خودتو با پارامتر ارسالی انجام بدی:

void MainForm::tab_updateStatusBar(QString message)
{
//do somthing with message
statusBar()->setText(message);
}

پ. ن: این کدها رو همین‌جا نوشتم و ممکنه اشتباه املایی داشته باشه