آموزش برنامه نویسی Qt – QPushButton – connect() - وب سایت رضا احمدی

استفاده از کلیدها و طریقه اتصال کلیدها به متدها در محیط برنامه نویسی Qt creator

آموزش برنامه نویسی Qt – QPushButton – connect()

در قسمت قبل از طریق محیط طراحی فرم یک کلید از کلاس QPushButton را به یک متد وصل کردیم و عملیات مد نظر را در آن متد پیاده سازی کردیم ولی راه حل مناسبتر استفاده از متد connect() از کلاس QObject است که میتوانیم انواع سیگنالها را به انواع اسلاتها وصل کنیم یا چندین سیگنال را به یک متد وصل کنیم.

نکته base class  یا پدر کلاسهای کیوت، کلاس QObject  است.

متد connect  به ۵ پارامتر به عنوان ورودی نیاز  دارد :

QMetaObject::Connection QObject::connect(const QObject *sender, const char *signal, const QObject *receiver, const char *method, Qt::ConnectionType type = Qt::AutoConnection(

 پارامتر اول آبجکتی است که یک سیگنالی را میفرستد. (const QObject *sender )

پارامتر دوم نام سینگال است که آبجکت sender  ارسال می کند . (const char *signal )

پارامتر سوم آبجکتی است که این سیگنال را دریافت میکند. (const QObject *receiver )

پارامتر چهارم متد (تابع) است از کلاس آبجکت reciver که پاسخ سیگنال مد نظر است. ( const char *method )

پارامتر پنجم نوع اتصال ایت که معمولا بصورت همان  Qt::AutoConnection قرار داده می شود که بصورت پیش فرض است.

حال به برنامه ای که جلسه قبل نوشتیم می رویم :

در فایل zxmain.h کلاس zxMain خطوط زیر را به قسمت private slots  اضافه میکنیم.

private slots:

    void click_any_button();

و در فایل zxmain.cpp  این متد را پیاده سازی میکنیم.

void zxMain::click_any_button()
{
QMessageBox::information(this,”mrzx.ir”,”کلیک شناسایی شد.”);
}

حال وقت آن رسیده btn_2 , btn_3  را به این متدها وصل کنیم؛ برای این منظور خطوط زیر را به متد سازنده کلاس اضافه می کنیم:

connect(ui->btn_2,SIGNAL(clicked(bool)),this,SLOT(click_any_button()));

connect(ui->btn_3,SIGNAL(clicked(bool)),this,SLOT(click_any_button()));

” متد سازنده کلاس متدی است هم نام کلاس هیچ type ندارد حتی نوع void نیست و به محض اجرای کلاس ابتدا آن متد اجرا می شود “

حال پس از اجرای برنامه اگر بر روی کلید دو یا سه کلیک کنید پیغام کلیک شناسایی شد را دریافت می کنید.

سورس کامل برنامه به شرح زیر است:

zxmain.h

  1. #ifndef ZXMAIN_H
  2. #define ZXMAIN_H
  3.  
  4. #include <QMainWindow>
  5.  
  6. namespace Ui {
  7. class zxMain;
  8. }
  9.  
  10. class zxMain : public QMainWindow
  11. {
  12.     Q_OBJECT
  13.  
  14. public:
  15.     explicit zxMain(QWidget *parent = 0);    
  16.     ~zxMain();
  17.  
  18. private slots:
  19.     void on_btn_1_clicked();
  20.     void click_any_button();
  21.  
  22. private:
  23.     Ui::zxMain *ui;
  24. };
  25.  
  26. #endif // ZXMAIN_H

zxmain.cpp

  1. #include "zxmain.h"
  2. #include "ui_zxmain.h"
  3. #include <QMessageBox>
  4.  
  5. zxMain::zxMain(QWidget *parent) :
  6.     QMainWindow(parent),
  7.     ui(new Ui::zxMain)
  8. {
  9.     ui->setupUi(this);
  10.     connect(ui->btn_2,SIGNAL(clicked(bool)),this,SLOT(click_any_button()));
  11.     connect(ui->btn_3,SIGNAL(clicked(bool)),this,SLOT(click_any_button()));
  12. }
  13.  
  14. zxMain::~zxMain()
  15. {
  16.     delete ui;
  17. }
  18.  
  19. void zxMain::on_btn_1_clicked()
  20. {
  21.     QMessageBox::information(this,"mrzx.ir","شما بر روی کلید یک کلیک کردید.");
  22.  
  23. }
  24.  
  25. void zxMain::click_any_button()
  26. {
  27.     QMessageBox::information(this,"mrzx.ir","کلیک شناسایی شد.");
  28. }

آموزش های کوتاه و کاربردی برنامه نویسی c++  در محیط Qt creator  ادامه دارد…

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد.

دیدگاه های ثبت شده

    حسین | ۱۶ آذر ۱۴۰۰

    سلام
    من ۴ تا فرم ساختم (setting,about,mainwindow,show)

    میخوام با زدن کلیک برم به یک فرم دیگه

    کدش چی هست؟
    Qt

      رضا احمدی | ۲۲ آذر ۱۴۰۰

      سلام
      کافیه از فرم هایی که ساختی توی کلاس اصلیت یه ابجکت ازشون بسازی و هر وقت خواستی از متد show برای نمایش اون فرم استفاده کنی توی لینک زیر یه همچین فرمی هست:
      QSqlTableModel – پروژه برنامه نویسی Qt کار با دیتابیس sqlite

      یه راه دیگه که داری فرم ها رو به یه ویدجت از کلاس اصلی نسبت بدی(promote to) و توابع get , set براشون بنویسی…