Sending parameters with click event
-
Hello, my codes are below.
I want to send a parameter to the addpage class when a click event is triggered. How can I do that? Thanks
mainpage.h file:#ifndef MAINPAGE_H #define MAINPAGE_H #include "giriswidget.h" #include "btnitemdelegate.h" #include "addpage.h" #include "detailpage.h" #include "update.h" #include <QDialog> #include <QTableView> #include <QSql> #include <QSqlDatabase> #include <QSqlQueryModel> #include <QSqlQuery> #include <QStandardItemModel> #include <QPushButton> #include <QModelIndex> namespace Ui { class MainPage; } class MainPage : public QDialog { Q_OBJECT public: explicit MainPage(QWidget *parent = nullptr); ~MainPage(); void connectDb(); void updateTableView(); void myview_stil_layout(); public slots: void updateBtnClickedSlot(const QModelIndex &mindex); void deleteBtnClickedSlot(const QModelIndex &mindex); //void addBtn_Page_Clicked(); //addpage void sendParameterToAddPage(QModelIndex &mindex); void detailBtn_Page_Clicked(); void clickedLogOutBtn_Clicked(); //int sevkHesaplama(); public: Ui::MainPage *ui; //AddPage *addpg; DetailPage *detail; QSqlDatabase mydb; QSqlQueryModel *queryModel; QSqlQueryModel *queryModelDelete; QStandardItemModel *itemModelBtn; QPushButton *deleteBtn; QPushButton *updateBtn; const int ID={}; int objID; }; #endif // MAINPAGE_H
mainpage.cpp file:
#include "mainpage.h" #include "ui_mainpage.h" #include "giriswidget.h" #include "btnitemdelegate.h" #include "addpage.h" #include "detailpage.h" #include "update.h" #include <QMessageBox> #include <QDebug> #include <QSqlError> #include <QHeaderView> #include <QSqlQueryModel> #include <QStringList> #include <QWidget> #include <QModelIndex> #include <QObject> MainPage::MainPage(QWidget *parent) : QDialog(parent), ui(new Ui::MainPage) { ui->setupUi(this); connectDb(); updateTableView(); connect(ui->logOutBtn,&QPushButton::clicked,this,&MainPage::clickedLogOutBtn_Clicked); AddPage *m_addPg = new AddPage(objID); connect(m_addPg,&AddPage::add_Data_Clicked,this,&MainPage::addBtn_Page_Clicked); connect(ui->detailBtn,&QPushButton::clicked,this,&MainPage::detailBtn_Page_Clicked); btnItemDelegate *btnDlgte = new btnItemDelegate("delete",ui->myView); btnItemDelegate *btnUpdate = new btnItemDelegate("guncelle",ui->myView); connect(btnDlgte, &btnItemDelegate::clickedDeleteBtnSignal, this, &MainPage::deleteBtnClickedSlot); connect(btnUpdate, &btnItemDelegate::clickedUpdateBtnSignal,this, &MainPage::updateBtnClickedSlot); //updatePage detail = new DetailPage(); queryModel->insertColumn(queryModel->columnCount()); queryModel->setHeaderData(queryModel->columnCount()-1, Qt::Horizontal, tr("Sil")); ui->myView->setItemDelegateForColumn(queryModel->columnCount()-1,btnDlgte); //ok queryModel->insertColumn(queryModel->columnCount()); queryModel->setHeaderData(queryModel->columnCount()-1, Qt::Horizontal, tr("Güncelle")); ui->myView->setItemDelegateForColumn(queryModel->columnCount()-1,btnUpdate); //ok ui->myView->setSelectionBehavior(QAbstractItemView::SelectItems); ui->myView->setModel(queryModel); } void MainPage::connectDb() { mydb = QSqlDatabase::addDatabase("QMYSQL"); mydb.setHostName("localhost"); mydb.setDatabaseName("krn_iplikler"); mydb.setUserName("root"); mydb.setPassword("root"); mydb.setPort(3306); mydb.open(); if (mydb.isOpen()) { qDebug()<<"db connection is succesfully"; } else { QMessageBox::information(this,"Connection Failed.!","Database connection failed!!!!",QMessageBox::Cancel); qDebug()<<mydb.lastError().text(); } } void MainPage::addBtn_Page_Clicked() { sendParameterToAddPage(mindex); } void MainPage::sendParameterToAddPage(QModelIndex &mindex) //addpage sınıfına parametre gönderme { if (mindex.isValid()) { int rowIndex = mindex.row(); qDebug() << "ekle butonu tıklandı. indeksi: " << rowIndex; auto objID = queryModel->data(queryModel->index(rowIndex, 0), Qt::DisplayRole).toInt(); AddPage *addpag = new AddPage(objID); connect(addpag , &AddPage::veriEklendi,this,[=](){ qDebug()<<"tabloya eklendi"; queryModel->setQuery("SELECT * FROM iplikler",mydb); queryModel->insertColumn(queryModel->columnCount()); queryModel->setHeaderData(queryModel->columnCount()-1, Qt::Horizontal, tr("Sil")); queryModel->insertColumn(queryModel->columnCount()); queryModel->setHeaderData(queryModel->columnCount()-1, Qt::Horizontal, tr("Güncelle")); ui->myView->setModel(queryModel); QHeaderView *horizontalHeader = ui->myView->horizontalHeader(); horizontalHeader->setResizeContentsPrecision(QHeaderView::ResizeToContents); }); addpag->setModal(true); addpag->setWindowTitle("Add Page"); addpag->setWindowIcon(QIcon(":/icon/icons/add.png")); addpag->setWindowFlags( Qt::WindowMinimizeButtonHint); addpag->adjustSize(); addpag->setFixedSize(1000,150); addpag->show(); }else { qDebug()<<"addpage error index"; } } void MainPage::detailBtn_Page_Clicked() { detail->setWindowTitle("Details Page"); detail->setWindowIcon(QIcon(":/icon/icons/detail.png")); detail->setWindowFlags( Qt::WindowMinimizeButtonHint | Qt::WindowCloseButtonHint); detail->setModal(true); detail->adjustSize(); detail->setFixedSize(600,400); detail->show(); } void MainPage::clickedLogOutBtn_Clicked() { this->close(); GirisWidget *giris = new GirisWidget(); giris->setWindowTitle("Login Page"); giris->adjustSize(); giris->setFixedSize(450,350); giris->setWindowIcon(QIcon(":/icon/icons/login.png")); giris->setWindowFlags( Qt::WindowMinimizeButtonHint | Qt::WindowCloseButtonHint); giris->show(); } void MainPage::updateTableView() { queryModel = new QSqlQueryModel(); queryModel->setQuery("SELECT * FROM iplikler",mydb); ui->myView->setModel(queryModel); myview_stil_layout(); } void MainPage::myview_stil_layout() { if (!queryModel) { return; } QStringList headernames; headernames <<"Sıra No"<<"Boyanan Miktar"<<"Cari Kodu"<<"Cari Adı"<<"Depodan Rezerv" <<"İplik Kodu"<<"İplik Adı"<<"Miktar"<<"Onay Zamanı"<<"Özel Notu"<<"Renk Kodu"<<"Renk Adı"<<"Sevk Edilecek Miktar"<<"Sevk Miktarı"; for (int i = 0; i < headernames.size(); ++i) { queryModel->setHeaderData(i, Qt::Horizontal, headernames[i]); } ui->myView->setStyleSheet("QHeaderView::section { background-color: lightblue ; color: black; font-weight: bold;}"); ui->myView->setModel(queryModel); ui->myView->verticalHeader()->setVisible(false); QHeaderView *horizontalHeader = ui->myView->horizontalHeader(); horizontalHeader->setResizeContentsPrecision(QHeaderView::ResizeToContents); } void MainPage::updateBtnClickedSlot(const QModelIndex &mindex) { if (mindex.isValid()) { int rowIndex = mindex.row(); qDebug() << "Güncelle butonuna tıklandı. Satır indeksi: " << rowIndex; auto itemID = queryModel->data(queryModel->index(rowIndex, 0), Qt::DisplayRole).toInt(); Update *update = new Update(itemID); //id ve model i update e iletme connect(update , &Update::verilerGuncellendi,this,[=](){ qDebug()<<"tablo guncellendi"; queryModel->setQuery("SELECT * FROM iplikler",mydb); queryModel->insertColumn(queryModel->columnCount()); queryModel->setHeaderData(queryModel->columnCount()-1, Qt::Horizontal, tr("Sil")); queryModel->insertColumn(queryModel->columnCount()); queryModel->setHeaderData(queryModel->columnCount()-1, Qt::Horizontal, tr("Güncelle")); ui->myView->setModel(queryModel); QHeaderView *horizontalHeader = ui->myView->horizontalHeader(); horizontalHeader->setResizeContentsPrecision(QHeaderView::ResizeToContents); }); update->setWindowTitle("Update Page"); update->setWindowIcon(QIcon(":/icon/icons/updatepage.png")); update->setWindowFlags( Qt::WindowMinimizeButtonHint | Qt::WindowCloseButtonHint); update->setModal(true); update->setFixedSize(1000,150); update->show(); }else { qDebug()<<"error index"; } } void MainPage::deleteBtnClickedSlot(const QModelIndex &mindex) { if (mindex.isValid()) { int rowIndex = mindex.row(); qDebug() << "delete butonuna tıklandı. indeksi: " << rowIndex; QModelIndex modelIndex = queryModel->index(rowIndex,0); int ID = queryModel->data(modelIndex,Qt::DisplayRole).toInt(); QSqlQuery deleteQuery; deleteQuery.prepare("DELETE FROM iplikler WHERE ID = :ID "); deleteQuery.bindValue(":ID",ID); if (deleteQuery.exec()) { qDebug()<<"veri silindi"; queryModel->setQuery("SELECT * FROM iplikler",mydb); queryModel->insertColumn(queryModel->columnCount()); queryModel->setHeaderData(queryModel->columnCount()-1, Qt::Horizontal, tr("Sil")); queryModel->insertColumn(queryModel->columnCount()); queryModel->setHeaderData(queryModel->columnCount()-1, Qt::Horizontal, tr("Güncelle")); ui->myView->setModel(queryModel); } else{ qDebug() << "Satır silinirken hata oluştu:" << deleteQuery.lastError().text(); } }else { qDebug()<<"error index"; } } /*int MainPage::sevkHesaplama() { }*/ MainPage::~MainPage() { delete ui; }
addpage.h file:
#ifndef ADDPAGE_H #define ADDPAGE_H #include <QDialog> #include <QSqlQuery> #include <QSqlQueryModel> namespace Ui { class AddPage; } class AddPage : public QDialog { Q_OBJECT public: explicit AddPage(int objID, QWidget *parent = nullptr); ~AddPage(); bool lnedit_cntrl(); void add_Data_Clicked(); bool insertData(const QString &tablename,const QMap<QString, QString>& iplikData); void iptalBtn_clicked(); signals: void addData(); void veriEklendi(); private: Ui::AddPage *ui; QSqlQueryModel *myQueryModel; QSqlQueryModel *queryModel; QSqlQuery *myQuery; int n_ID; }; #endif // ADDPAGE_H
addpage.cpp file:
#include "addpage.h" #include "ui_addpage.h" #include <QDebug> #include <QMessageBox> #include <QSqlError> #include <QHeaderView> AddPage::AddPage(int objID, QWidget *parent) : QDialog(parent), n_ID(objID), ui(new Ui::AddPage) { ui->setupUi(this); myQueryModel = new QSqlQueryModel(); myQuery = new QSqlQuery(); connect(ui->kaydetBtn,&QPushButton::clicked,this,&AddPage::add_Data_Clicked); connect(ui->iptalBtn,&QPushButton::clicked,this,&AddPage::iptalBtn_clicked); } AddPage::~AddPage() { delete ui; } bool AddPage::lnedit_cntrl() { QList<QLineEdit*> lineedits {ui->iplikkodLnedit,ui->ipliknameLnedit,ui->renkkodLnedit,ui->renknameLnedit,ui->carikodLnedit,ui->carinameLnedit, ui->miktarLnedit}; for (QLineEdit *lineEdit : lineedits) { if (lineEdit->text().isEmpty()) { QMessageBox::critical(this,"Empty.!","Data is Empty!!!"); return false; } } return true; } bool AddPage::insertData(const QString &tableName,const QMap<QString, QString>& iplikData) { QString queryString = "INSERT INTO " + tableName + " ("; QStringList columnNames; QStringList valuePlaceholders; for (auto it = iplikData.constBegin(); it != iplikData.constEnd(); ++it) { columnNames << it.key(); valuePlaceholders << "?"; } queryString += columnNames.join(", ") + ") VALUES (" + valuePlaceholders.join(", ") + ")"; myQuery->prepare(queryString); for (auto it = iplikData.constBegin(); it != iplikData.constEnd(); ++it) { myQuery->addBindValue(it.value()); } bool success = myQuery->exec(); return success; } void AddPage::iptalBtn_clicked() { this->close(); } void AddPage::add_Data_Clicked() { auto empty = lnedit_cntrl(); if (!empty) { QString _iplikkod = ui->iplikkodLnedit->text(); QString _iplikname = ui->ipliknameLnedit->text(); QString _renkkod = ui->renkkodLnedit->text(); QString _renkname = ui->renknameLnedit->text(); QString _carikod = ui->carikodLnedit->text(); QString _cariname = ui->carinameLnedit->text(); QString _miktar = ui->miktarLnedit->text(); QString _drezerv = ui->drezervLnedit->text(); QString _bmiktar = ui->bmiktarLnedit->text(); QString _ozelnot = ui->ozelNot->text(); QMap<QString, QString> iplikData; QString tableName = "iplikler"; bool success = false; iplikData["iplikkod"] = _iplikkod; iplikData["iplikname"] = _iplikname; iplikData["renkkod"] = _renkkod; iplikData["renkname"] = _renkname; iplikData["carikod"] = _carikod; iplikData["cariname"] = _cariname; iplikData["boyamamiktar"] = _bmiktar; iplikData["deporezerv"] = _drezerv; iplikData["miktar"] = _miktar; iplikData["ozelnot"] = _ozelnot; success = insertData(tableName,iplikData); if(success) { emit veriEklendi(); qDebug()<<"Veriler eklendi"; } else { qDebug() << "Veri ekleme başarısız" << myQuery->lastError().text(); } } } /* if (notEmpty) { QString _iplikkod = ui->iplikkodLnedit->text(); QString _iplikname = ui->ipliknameLnedit->text(); QString _renkkod = ui->renkkodLnedit->text(); QString _renkname = ui->renknameLnedit->text(); QString _carikod = ui->carikodLnedit->text(); QString _cariname = ui->carinameLnedit->text(); QString _miktar = ui->miktarLnedit->text(); QString _drezerv = ui->drezervLnedit->text(); QString _bmiktar = ui->bmiktarLnedit->text(); QString _ozelnot = ui->ozelNot->text(); QMap<QString, QString> iplikData; QString tableName; iplikData["iplikkod"] = _iplikkod; iplikData["iplikname"] = _iplikname; tableName= "iplikler"; bool success = insertData(tableName,iplikData); if(!success) { qDebug() << "Veri ekleme başarısız:1 " << myQuery->lastError().text(); } iplikData.clear(); iplikData["renkkod"] = _renkkod; iplikData["renkname"] = _renkname; tableName = "iplikler"; success = insertData(tableName,iplikData); if(!success) { qDebug() << "Veri ekleme başarısız:2 " << myQuery->lastError().text(); } iplikData.clear(); iplikData["carikod"] = _carikod; iplikData["cariname"] = _cariname; tableName = "iplikler"; success = insertData(tableName,iplikData); if(!success) { qDebug() << "Veri ekleme başarısız:3 " << myQuery->lastError().text(); } iplikData.clear(); iplikData["boyamamiktar"] = _bmiktar; tableName = "iplikler"; success = insertData(tableName,iplikData); if(!success) { qDebug() << "Veri ekleme başarısız:4 " << myQuery->lastError().text(); } iplikData.clear(); iplikData["deporezerv"] = _drezerv; tableName = "iplikler"; success = insertData(tableName,iplikData); if(!success) { qDebug() << "Veri ekleme başarısız:5 " << myQuery->lastError().text(); } iplikData.clear(); iplikData["miktar"] = _miktar; tableName = "iplikler"; success = insertData(tableName,iplikData); if(!success) { qDebug() << "Veri ekleme başarısız:6 " << myQuery->lastError().text(); } iplikData.clear(); iplikData["ozelnot"] = _ozelnot; tableName = "iplikler"; success = insertData(tableName,iplikData); if(!success) { qDebug() << "Veri ekleme başarısız:7 " << myQuery->lastError().text(); } MainPage *mainPage = qobject_cast<MainPage*>(this->parentWidget()); if (mainPage) { mainPage->updateTableView(); } } */
-
@yy_pc_programmer
That is hundreds of lines to ask some small question. Maybe someone else will want to look through all that code. I can say:- If you want to pass an extra parameter to the slot connected to a signal use a C++ lambda.
// `param` holds something you want to send with the signal to the slot connect(signalObject, &Signaller::signal, slotObject, [param]() { qDebug() << param; })'
- If you want to "pass" a parameter to a class, add formal parameter for that to class's constructor, or provide a setter method you call after creating the instance.
Otherwise you can wait to see if someone wants to look through your code to guess what you want.
-
@yy_pc_programmer Can you please be more specific? What parameter and what click event (I guess you mean click signal?)? You can use a lambda as slot to pass any parameter you want to code you call in the lambda.
-
@yy_pc_programmer said in Sending parameters with click event:
I want to send a parameter to the addpage class when a click event is triggered. How can I do that?
So
AddPage
is aQDialog
?! (maybe you should have mentioned that, instead of posting a bunch of unrelated code)In addition to @JonB and @jsulm :
What do you want to send? To where? And where + when does the click happen?Edit:
After scrolling through your code, I found this
void MainPage::addBtn_Page_Clicked() { sendParameterToAddPage(mindex); }
and this
void MainPage::sendParameterToAddPage(QModelIndex &mindex){ // ...... AddPage *addpag = new AddPage(objID); // ....... addpag->setModal(true); addpag->setWindowTitle("Add Page"); addpag->setWindowIcon(QIcon(":/icon/icons/add.png")); addpag->setWindowFlags( Qt::WindowMinimizeButtonHint); addpag->adjustSize(); addpag->setFixedSize(1000,150); addpag->show();
First of all, you know that you create a new
AddPage
dialog every time, which leaks memory (as far as I can see) and never use theAddPage *addpg;
member var from yourMainPage
?!If you want to pass something while you create your dialog, you can simply add a function to your dialog class.
The current way looks like bad design, esp. this inAddPage
MainPage *mainPage = qobject_cast<MainPage*>(this->parentWidget()); if (mainPage) { mainPage->updateTableView(); }
-
Y yy_pc_programmer has marked this topic as solved on