Passing the signal to another class with a parameter
Unsolved
General and Desktop
-
ekleform.cpp
#include "ekleform.h" #include "ui_ekleform.h" #include "mainpage.h" ekleForm::ekleForm(QWidget *parent) : QDialog(parent), ui(new Ui::ekleForm) { ui->setupUi(this); myQueryModel = new QSqlQueryModel(); myQuery = new QSqlQuery(); connect(ui->kaydetBtn,&QPushButton::clicked,this,&ekleForm::add_Data_Clicked); MainPage *m_page = dynamic_cast<MainPage*>(parent); //ana sayfayı elde etme if (m_page) { connect(m_page, &MainPage::tabIsOpenedEkleForm, this, &ekleForm::tabWidgtOpenEkleForm); // Main page'den gelen sinyali yakala } else { qDebug() << "parent MainPage değil!"; } } ekleForm::ekleForm(int objID, QWidget *parent) : QDialog(parent), n_ID(objID), ui(new Ui::ekleForm) { ui->setupUi(this); } ekleForm::~ekleForm() { delete ui; } bool ekleForm::lnedit_cntrl() { QList<QLineEdit*> lineedits {ui->sipnoLnEdit,ui->iplikkodLnedit,ui->ipliknameLnedit,ui->renkkodLnedit,ui->renknameLnedit,ui->carikodLnedit,ui->carinameLnedit, ui->miktarLnedit,ui->drezervLnedit,ui->bmiktarLnedit,ui->ozelNot}; for (QLineEdit *lineEdit : lineedits) { if (lineEdit->text().isEmpty()) { QMessageBox::critical(this,"Empty.!","Data is Empty!!!"); return false; } } return true; } bool ekleForm::insertData(const QString &tableName,const QMap<QString, QString>& siparisData) { QString queryString = "INSERT INTO " + tableName + " ("; QStringList columnNames; QStringList valuePlaceholders; for (auto it = siparisData.constBegin(); it != siparisData.constEnd(); ++it) { columnNames << it.key(); valuePlaceholders << "?"; } queryString += columnNames.join(", ") + ") VALUES (" + valuePlaceholders.join(", ") + ")"; myQuery->prepare(queryString); for (auto it = siparisData.constBegin(); it != siparisData.constEnd(); ++it) { myQuery->addBindValue(it.value()); } bool success = myQuery->exec(); return success; } QString ekleForm::getFisNoIDByKod(const QString &kod) { QSqlQuery fisNoQuery; fisNoQuery.prepare("SELECT ID FROM fisno WHERE Deger = :Kod "); fisNoQuery.bindValue(":Kod",kod); if (fisNoQuery.exec()) { return fisNoQuery.value(0).toString(); }else { qDebug()<<"fisno ID alınamadı"<<fisNoQuery.lastError().text(); return QString(); } } int ekleForm::getIplikIDByKod(const QString &kod) { //iplik_ID = SELECT Kod FROM iplik WHERE Kod='1/15K'; QSqlQuery iplikQuery; iplikQuery.prepare("SELECT ID FROM iplik WHERE Kod = :KOD"); iplikQuery.bindValue(":KOD",kod); if (iplikQuery.exec()) { if (iplikQuery.next()) { int deger1 = iplikQuery.value(0).toInt(); qDebug() << "Alınan değer getiplik : " << deger1; return deger1; }else { qDebug() << "sorgu boş degeri verdi"; return -1; } }else { qDebug()<<"iplik ID alınamadı"<<iplikQuery.lastError().text(); qDebug()<<"iplik ID alınan parametre : "<<kod; return -1; } } int ekleForm::getRenkIDByKod(const QString &kod) { QSqlQuery renkQuery; renkQuery.prepare("SELECT ID FROM renk WHERE Kod = :KOD "); renkQuery.bindValue(":KOD", kod); if (renkQuery.exec()) { if (renkQuery.next()) { int deger2 = renkQuery.value(0).toInt(); qDebug() << "Alınan değer getRenk : " << deger2; return deger2; } else { qDebug() << "Sorgu boş değeri verdi"; return -1; } } else { qDebug() << "Renk ID si alınamadı" << renkQuery.lastError().text(); qDebug() << "Renk ID si alınan parametre : " << kod; return -1; } } int ekleForm::getCariIDByKod(const QString &kod) { QSqlQuery cariQuery; cariQuery.prepare("SELECT ID FROM cari WHERE Kod = :KOD "); cariQuery.bindValue(":KOD", kod); if (cariQuery.exec()) { if (cariQuery.next()) { int deger3 = cariQuery.value(0).toInt(); qDebug() << "Alınan değer getCari : " << deger3; return deger3; } else { qDebug() << "Sorgu boş değeri verdi"; return -1; } } else { qDebug() << "Cari ID si alınamadı" << cariQuery.lastError().text(); qDebug() << "Cari ID si alınan parametre : " << kod; return -1; } } void ekleForm::add_Data_Clicked() //veri ekleme { QMap<QString, QString> siparisData; //iplikData QString tableName = "siparis"; bool success = false; bool ok = lnedit_cntrl(); if (ok) { QString _sipno =ui->sipnoLnEdit->text();// getFisNoIDByKod(ui->sipnoLnEdit->text()); int _iplik_ID = getIplikIDByKod(ui->iplikkodLnedit->text()); if(_iplik_ID == -1){ qDebug()<<"Tanımsız iplik id degeri geldi."; return; } QString iplikID_str = QString::number(_iplik_ID); int _renk_ID = getRenkIDByKod(ui->renkkodLnedit->text()); if(_renk_ID == -1){ qDebug()<<"Tanımsız renk id degeri geldi."; return; } QString renkID_str = QString::number(_renk_ID); int _cari_ID = getCariIDByKod(ui->carikodLnedit->text()); if(_cari_ID == -1){ qDebug()<<"Tanımsız cari id degeri geldi."; return; } QString cariID_str = QString::number(_cari_ID); QString _miktar = ui->miktarLnedit->text(); QString _deporezerv = ui->drezervLnedit->text(); QString _boyamamiktar = ui->bmiktarLnedit->text(); QString _ozelnot = ui->ozelNot->text(); // kontrol edilen degerlerde boşluk varsa işlem durdur if (_sipno.isEmpty() || iplikID_str.isEmpty() || renkID_str.isEmpty() || cariID_str.isEmpty() || _miktar.isEmpty() || _deporezerv.isEmpty() || _boyamamiktar.isEmpty()) { QMessageBox::critical(this, "Hata", "Bir veya daha fazla alan boş!"); return; } siparisData["FisNo"] = _sipno; siparisData["iplik_ID"] =iplikID_str; siparisData["renk_ID"] = renkID_str; siparisData["cari_ID"] = cariID_str; siparisData["miktar"] = _miktar; siparisData["deporezerv"] = _deporezerv; siparisData["boyamamiktar"] = _boyamamiktar; siparisData["ozelnot"] = _ozelnot; success = insertData(tableName,siparisData); if(success) { emit veriEklendi(); // tablo guncelleme ıcın yayılan sinyal.. qDebug()<<"Veriler eklendi"; this->close(); } else { qDebug() << "Veri ekleme başarısız" << myQuery->lastError().text(); } } } QString ekleForm::uretilen_SipNo() { QString sonSipNo; int sayac = 90000; //sayac son değeri //En son siparis no yu al QSqlQuery dataQuery; dataQuery.prepare("SELECT MAX(Deger) FROM fisno WHERE Deger LIKE 'K_____'"); //veritabanda K00000 formatta max deger if (dataQuery.exec() && dataQuery.next()) { sonSipNo = dataQuery.value(0).toString(); //en büyük sipnoyu al if (!sonSipNo.isEmpty()) { qDebug()<<"en son sipno :"<<sonSipNo; }else { qDebug()<<"veritabanındaki sipno degerler küçük"; } }else { qDebug()<<"Sipariş no alınırken hata : "<<dataQuery.lastError().text(); return QString::number(-1); } //son sipnoyu +1 arttırarak yeni sipno oluştur QString yeniSipNo; if (!sonSipNo.isEmpty()) { int sonSayı = sonSipNo.mid(1).toInt(); //K00000 formatında son degeri al if (sonSayı < sayac) { sonSayı++; yeniSipNo = "K" + QString::number(sonSayı).rightJustified(5,'0'); //yeni sipno olustur }else { qDebug()<<"Max siparis no değerine ulaşıldı.!!!"; return QString::number(-1); } }else { qDebug()<<"veritabanında sipariş no bulunamadı."; return QString::number(-1); } //yeni sipno yu veritabanına ekleme QSqlQuery guncelSipNoQuery; guncelSipNoQuery.prepare("INSERT INTO fisno (Deger) VALUES (:newSipNo)"); guncelSipNoQuery.bindValue(":newSipNo",yeniSipNo); if (guncelSipNoQuery.exec()) { qDebug()<<"Siparis no eklendi.!!!"<<yeniSipNo; return yeniSipNo; }else { qDebug()<<"Yeni siparis no eklenemedi.!!!"<<guncelSipNoQuery.lastError().text(); return QString::number(-1); } } void ekleForm::tabWidgtOpenEkleForm() //mainpageden gelen sinyal ile gosterEvent tetiklenir { gosterEvent(); } void ekleForm::gosterEvent(event) { QDialog::showEvent(event); const auto fisNo = uretilen_SipNo(); if (!fisNo.isEmpty()) { ui->sipnoLnEdit->setText(fisNo); }else { QMessageBox::critical(this,"Hata.!!!","yeni siparis formu için siparis no üretilemedi.!!!!"); } }
mainpage.cpp
#include "mainpage.h" #include "ui_mainpage.h" #include <QDebug> #include <QListWidget> #include <QColorDialog> MainPage::MainPage(QWidget *parent) : QDialog(parent), ui(new Ui::MainPage), siparisFormOpen(false) //siparisform tab kontrol { ui->setupUi(this); connectDb(); connect(ui->logOutBtn,&QPushButton::clicked,this,&MainPage::clickedLogOutBtn_Clicked); connect(ui->tabWidget,&QTabWidget::tabCloseRequested,this,&MainPage::onTabCloseRequested); //tabclose gelen sinyal connect(ui->tabWidget, &QTabWidget::tabCloseRequested,this,[=](int index) { // Sekmenin sırasını (1 den başlayarak) ve sınıf adı yazdır qDebug() << "Kapanan sekme " << index + 1 << ": "; }); /*listwgdt = new QListWidget(dlg); connect(listwgdt, &QListWidget::itemClicked, this, &MainPage::myView_insertClicked);*/ //connect(btnColor,&QToolButton::clicked,this,&MainPage::chnge_Color); } void MainPage::connectDb() { mydb = QSqlDatabase::addDatabase("QMYSQL"); //QSqlDatabase db = QSqlDatabase::database(); // Mevcut bir veritabanı bağlantısına erişim mydb.setHostName("localhost"); mydb.setDatabaseName("krn_iplikler"); mydb.setUserName("root"); mydb.setPassword("root"); mydb.setPort(3306); if (mydb.open()) { qDebug()<<"db connection is succesfully"; return; } else { QMessageBox::information(this,"Connection Failed.!","Database connection failed!!!!"); qDebug()<<mydb.lastError().text(); return; } } void MainPage::on_sipBtn_clicked() { // varolan siparisform tablarını kontrol et for (int i = 0; i < ui->tabWidget->count(); ++i) { QWidget *widget = ui->tabWidget->widget(i); if (dynamic_cast<SiparisForm*>(widget)) { ui->tabWidget->setCurrentIndex(i); return; } } SiparisForm *sf = new SiparisForm(); sf->setWindowTitle("Siparişler"); sf->setWindowIcon(QIcon(":/icon/icons/website.png")); ui->tabWidget->setTabsClosable(true); int newTabIndex = ui->tabWidget->addTab(sf, tr("Siparişler")); ui->tabWidget->setCurrentIndex(newTabIndex); // yeni sekme aktif etme connect(sf, &SiparisForm::clickSipEvent, this, &MainPage::siparisLoadTab); //siparisformdaki insert eventi } void MainPage::siparisLoadTab() //siparis kayıt, insert eventi oldgnda { qDebug()<<"siparis tab open"; if (!siparisFormOpen) { //siparisform açık değilse formEkle = new ekleForm; formEkle->setWindowTitle("Sipariş Ekle"); formEkle->setWindowFlags( Qt::WindowMinimizeButtonHint | Qt::WindowCloseButtonHint); formEkle->adjustSize(); formEkle->resize(250,200); formEkle->setWindowIcon(QIcon(":/icon/icons/home.png")); ui->tabWidget->setTabsClosable(true); int newTabIndex = ui->tabWidget->addTab(formEkle, tr("Sipariş Ekle")); ui->tabWidget->setCurrentIndex(newTabIndex); // yeni sekme aktif etme //siparisekle tabwidget açık kapalı kontrol if (formEkle->isActiveWindow()) { emit tabIsOpenedEkleForm(); //bu sinyal tetiklenirse, ekleformdaki gosterEvent calıstır, // QShowEvent türünden nesne oluşturup gönderme qDebug()<<"Ekleform tabwidget açıldı sinyal gitti"; }else { qDebug()<<"Ekleform tabwidget sinyali tetiklenmedi"; } } } void MainPage::onTabCloseRequested(const int m_index) //index ile tıklanan tab hangisiyse kapatılır { ui->tabWidget->removeTab(m_index); qDebug()<<"click tab "<<m_index; } void MainPage::on_renkKartBtn_clicked() { for (int i = 0; i < ui->tabWidget->count(); ++i) { QWidget *widget = ui->tabWidget->widget(i); if (dynamic_cast<RenkForm*>(widget)) { // Eğer tab zaten varsa, onu seç ui->tabWidget->setCurrentIndex(i); return; } } rf = new RenkForm(); rf->setWindowTitle("Renk Kart Ekle"); rf->setWindowIcon(QIcon(":/icon/icons/website.png")); ui->tabWidget->setTabsClosable(true); int newTabIndex = ui->tabWidget->addTab(rf, tr("Renk Kart Ekle")); ui->tabWidget->setCurrentIndex(newTabIndex); } void MainPage::on_cariKartBtn_clicked() { for (int i = 0; i < ui->tabWidget->count(); ++i) { QWidget *widget = ui->tabWidget->widget(i); if (dynamic_cast<CariForm*>(widget)) { // Eğer tab zaten varsa, onu seç ui->tabWidget->setCurrentIndex(i); return; } } cf = new CariForm(); cf->setWindowTitle("Cari Kart Ekle"); cf->setWindowIcon(QIcon(":/icon/icons/website.png")); ui->tabWidget->setTabsClosable(true); int newTabIndex = ui->tabWidget->addTab(cf, tr("Cari Kart Ekle")); ui->tabWidget->setCurrentIndex(newTabIndex); } void MainPage::on_iplikKartBtn_clicked() { for (int i = 0; i < ui->tabWidget->count(); ++i) { QWidget *widget = ui->tabWidget->widget(i); if (dynamic_cast<IplikForm*>(widget)) { // Eğer tab zaten varsa, onu seç ui->tabWidget->setCurrentIndex(i); return; } } ipf = new IplikForm(); ipf->setWindowTitle("İplik Kart Ekle"); ipf->setWindowIcon(QIcon(":/icon/icons/website.png")); ui->tabWidget->setTabsClosable(true); int newTabIndex = ui->tabWidget->addTab(ipf, tr("İplik Kart Ekle")); ui->tabWidget->setCurrentIndex(newTabIndex); } void MainPage::on_aracBtn_clicked() { for (int i = 0; i < ui->tabWidget->count(); ++i) { QWidget *widget = ui->tabWidget->widget(i); if (dynamic_cast<QWidget*>(widget)) { ui->tabWidget->setCurrentIndex(i); return; } } aracWdgt = new QWidget(); aracWdgt->setWindowTitle("Arkaplan renk"); aracWdgt->setWindowIcon(QIcon(":/icon/icons/website.png")); ui->tabWidget->setTabsClosable(true); btnColor = new QToolButton(); btnColor->setText("Renk Değiştir"); btnColor->setIcon(QIcon::fromTheme("add")); btnColor->setFixedSize(100,100); int newTabIndex = ui->tabWidget->addTab(aracWdgt, tr("Arkaplan renk")); ui->tabWidget->setCurrentIndex(newTabIndex); QVBoxLayout *layout = new QVBoxLayout(aracWdgt); layout->addWidget(btnColor); layout->setAlignment(Qt::AlignTop | Qt::AlignLeft); aracWdgt->setLayout(layout); } 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(); } MainPage::~MainPage() { delete ui; }
siparisform.cpp
#include "siparisform.h" #include "ui_siparisform.h" SiparisForm::SiparisForm(QWidget *parent) : QWidget(parent) , ui(new Ui::SiparisForm) { ui->setupUi(this); initializeDefault(); queryModel->insertColumn(queryModel->columnCount()); queryModel->setHeaderData(queryModel->columnCount()-1, Qt::Horizontal, tr("Sil")); btnItemDelegate *btnDlgte = new btnItemDelegate("delete",ui->myView); ui->myView->setItemDelegateForColumn(queryModel->columnCount()-1,btnDlgte); //ok queryModel->insertColumn(queryModel->columnCount()); queryModel->setHeaderData(queryModel->columnCount()-1, Qt::Horizontal, tr("Güncelle")); btnItemDelegate *btnUpdate = new btnItemDelegate("guncelle",ui->myView); ui->myView->setItemDelegateForColumn(queryModel->columnCount()-1,btnUpdate); //ok connect(btnDlgte, &btnItemDelegate::clickedDeleteBtnSignal, this, &SiparisForm::deleteBtnClickedSlot); connect(btnUpdate, &btnItemDelegate::clickedUpdateBtnSignal,this, &SiparisForm::updateBtnClickedSlot); //updatePage gelen sinyal } SiparisForm::~SiparisForm() { delete ui; } void SiparisForm::updateBtnClickedSlot(const QModelIndex &mindex) { if (mindex.isValid()) { auto rowIndex = mindex.row(); qDebug() << "Güncelle butonuna tıklandı. Satır indeksi: " << rowIndex; auto itemID = queryModel->data(queryModel->index(rowIndex, 0), Qt::DisplayRole).toInt(); /*QSqlQuery updateQuery; updateQuery.prepare('update iplikler set iplikkod=:newiplikkod, iplikname=:newiplikname renklerID=:newrenklerID where ID=:id '); updateQuery.bindValue(":ID",ID); if(updateQuery.exec()) { //veirler guncellendi} else { //hata mesajının detayı veirlir... }*/ // update sayfasını ac ve ID'yi gönder Update *update = new Update(itemID); //id ve model i update e iletme connect(update , &Update::verilerGuncellendi,this,[=](){ qDebug()<<"tablo guncellendi"; queryModel->setQuery("SELECT" "s.siparisno,i.iplikkod,i.iplikname,r.renkkod,r.renkisim,c.carikod,c.cariisim,s.miktar,s.boyamamiktar,s.deporezerv,s.ozelnot" "FROM siparis s,renkler r,iplikler i,cari c " "where s.iplik_ID=i.ID,s.renk_ID=r.ID,s.cari_ID=c.ID"); 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(); } } void SiparisForm::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 siparis WHERE ID = :ID "); deleteQuery.bindValue(":ID",ID); if (deleteQuery.exec()) { qDebug()<<"veri silindi"; queryModel->setQuery("SELECT " "s.siparisno, i.iplikkod, i.iplikname, r.renkkod, r.renkisim, c.carikod, c.cariisim, s.miktar, s.boyamamiktar, s.deporezerv, s.ozelnot, " "FROM siparis s,renkler r,iplikler i,cari c " "WHERE s.iplik_ID=i.ID,s.renk_ID=r.ID,s.cari_ID=c.ID"); 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"; } } void SiparisForm::myview_stil_layout() { qDebug()<<"sorgu başarılı işlendi1"; queryModel->setQuery( " SELECT " " s.FisNo AS 'SİPARİŞ KOD',i.Kod AS 'İPLİK KOD',i.Isim AS 'İPLİK ADI',r.Kod AS 'RENK KODU',r.Isim AS 'RENK KODU', " " c.Kod AS 'CARİ KODU',c.Isim AS 'CARİ İSİM', " " s.miktar AS 'MİKTAR',s.deporezerv AS 'DEPODAN REZERV',s.boyamamiktar AS 'BOYAMA MİKTARI',s.ozelnot AS 'ÖZEL NOTLAR' " " FROM krn_iplikler.`siparis` s " " INNER JOIN iplik i ON i.ID = s.iplik_ID " " INNER JOIN renk r ON r.ID = s.renk_ID " " INNER JOIN cari c ON c.ID = s.cari_ID"); qDebug()<<"sorgu başarılı işlendi2"; if (queryModel->lastError().isValid()) { qDebug() << "veriler yüklenirken hata oluştu: " << queryModel->lastError().text(); return; } ui->myView->verticalHeader()->setVisible(false); QHeaderView *horizontalHeader = ui->myView->horizontalHeader(); horizontalHeader->setResizeContentsPrecision(QHeaderView::ResizeToContents); } void SiparisForm::keyPressEvent(QKeyEvent *event) { if (event->key() == Qt::Key_Insert) { //event->type() == QEvent::KeyPress qDebug()<<"insert click func"; emit clickSipEvent(); qDebug()<<"insert key pressed."; }else { qDebug()<<"not event "<<event; } } void SiparisForm::initializeDefault() //varsayılan { ui->myView->setSelectionBehavior(QAbstractItemView::SelectItems); queryModel = new QSqlQueryModel; installEventFilter(this); //event filter myview_stil_layout(); ui->myView->setModel(queryModel); } void SiparisForm::iptalBtn_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(); }
I want to send the QShowEvent *event parameter to the addform class with a signal. How can I do that?
-
My purpose here is to control if the formAdd tab is open/closed.
-
Hi,
Please explain what exactly you are trying to achieve rather than dumping that much of code. It will be way easier to help you understanding what you want to do.There's no need for trying to intercept the show/hide event QTabWidget lets you know when the tab has changed so you can use that information.
-
This post is deleted!
-
@SGaist Could you please give me an example code?
-
Why do you need example code to connect a slot to https://doc.qt.io/qt-6/qtabwidget.html#currentChanged ?