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

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

آموزش برنامه نویسی Qt – QPushButton – ایجاد شی پویا

در این قسمت از آموزش کلید های کلاس QPushButton  در محیط برنامه نویسی Qt  به ایجاد چندین کلید بصورت پویا و طریقه اتصال این کلید ها برای ارسال آرگومان های متفاوت به یک اسلات می پردازیم.

این آموزش را برپایه یک مثال توضیح میدهیم بدین صورت که یک برنامه می نویسیم که یک کلید پویا ایجاد کند و با کلیک بر روی هر کلید یک پیغام متناسب با آن کلید نمایش میدهیم.

برای درک بهتر این آموزش قسمت قبلی را مطالعه نمایید

از طریق فرم طراحی یک کلاس QVBoxLayout  به برنامه اضافه کنید و نام آن را buttons_layout بگذارید.

طراحی رابط کاربری در محیط برنامه نویسی Qt
طراحی رابط کاربری در محیط برنامه نویسی Qt

ابتدا با اینکه چگونه یک کلید را بصورت پویا بسازیم آشنا می شویم:

در فایل zxmain.h کلاس zxMain  یک عضو جدید بصورت private  از نوع QPushButton  اضافه میکنیم:

private:
    QPushButton *m_btn;

و در فایل zxmain.cpp  در تابع سازنده این کلاس (همان متد zxMain() ) خطوط زیر را اضافه میکنیم:

   m_btn=new QPushButton(“کلید جدید”);
    ui->buttons_layout->addWidget(m_btn);
    connect(m_btn,SIGNAL(clicked(bool)),this,SLOT(click_any_button()));

دقت نمایید که addWidget(); یک متد از کلاس QLayout  است که میتوانیم با استفاده از آن widget های مختلفی را به یک layout  اضافه کنیم.

همانطور که میدانید هنگامی که بصورت پویا یک عضو جدید می سازیم یعنی داریم قسمتی از حافظه رم را در اختیار برنامه خود میگیرم لذا باید پس از اینکه کار ما با آن عضو جدید به پایان رسبد آن حافظه را آزاد کرده و دوباره در اختیار سیستم عامل قرار دهیم.

برای در اختیار گیری حافظه در زبان برنامه نویسی سی پلاس پلاس از کلمه کلیدی new  و برای آزادسازی حاقظه از کلمه کلیدیdelete  استفاده میکنیم بدین منظور به تابع مخرب کلاس را مانند زیر تغییر می دهیم:

zxMain::~zxMain()
{
delete m_btn;
    delete ui;
}

” تابع مخرب کلاس تابعی است هم نام کلاس که با علامت ~ شروع میشود و مانند تابع سازنده کلاس هیچ نوعی ندارد ولی برخلاف تابع سازنده کلاس هیچ آرگومانی به عنوان ورودی نمی پذیرد و همچنین پیاده سازی این متد در هر کلاس ضروری است. “

حال اگر برنامه را اجرا کنیم یک کلید جدید می بینم در برنامه که با کلیک با روی آن کلید متد click_any_button() فراخوانی میشود.

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

zxmain.h

  1. #ifndef ZXMAIN_H
  2. #define ZXMAIN_H
  3.  
  4. #include <QMainWindow>
  5. #include <QPushButton>
  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.     QPushButton *m_btn;
  25. };
  26.  
  27. #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.     m_btn=new QPushButton("کلید جدید");
  13.     ui->buttons_layout->addWidget(m_btn);
  14.     connect(m_btn,SIGNAL(clicked(bool)),this,SLOT(click_any_button()));
  15. }
  16.  
  17. zxMain::~zxMain()
  18. {
  19.     delete m_btn;
  20.     delete ui;
  21. }
  22.  
  23. void zxMain::on_btn_1_clicked()
  24. {
  25.     QMessageBox::information(this,"mrzx.ir","شما بر روی کلید یک کلیک کردید.");
  26.  
  27. }
  28.  
  29. void zxMain::click_any_button()
  30. {
  31.     QMessageBox::information(this,"mrzx.ir","کلیک شناسایی شد.");
  32. }

در قسمت بعدی این آموزش  چندین کلید را بصورت پویا تعریف میکنیم که هر کدام پارامتری را به متد مقصد ارسال می کنند.

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

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

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

تا کنون دیدگاهی ثبت نشده است.