
آموزش برنامه نویسی 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
#ifndef ZXMAIN_H
#define ZXMAIN_H
#include <QMainWindow>
namespace Ui {
class zxMain;
}
class zxMain : public QMainWindow
{
Q_OBJECT
public:
explicit zxMain(QWidget *parent = 0);
~zxMain();
private slots:
void on_btn_1_clicked();
void click_any_button();
private:
Ui::zxMain *ui;
};
#endif // ZXMAIN_H
zxmain.cpp
#include "zxmain.h"
#include "ui_zxmain.h"
#include <QMessageBox>
zxMain::zxMain(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::zxMain)
{
ui->setupUi(this);
connect(ui->btn_2,SIGNAL(clicked(bool)),this,SLOT(click_any_button()));
connect(ui->btn_3,SIGNAL(clicked(bool)),this,SLOT(click_any_button()));
}
zxMain::~zxMain()
{
delete ui;
}
void zxMain::on_btn_1_clicked()
{
QMessageBox::information(this,"mrzx.ir","شما بر روی کلید یک کلیک کردید.");
}
void zxMain::click_any_button()
{
QMessageBox::information(this,"mrzx.ir","کلیک شناسایی شد.");
}
آموزش های کوتاه و کاربردی برنامه نویسی c++ در محیط Qt creator ادامه دارد…
دیدگاهتان را بنویسید