Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. Qt Development
  3. General and Desktop
  4. Sending the signal to the classes I created in order
Forum Updated to NodeBB v4.3 + New Features

Sending the signal to the classes I created in order

Scheduled Pinned Locked Moved Solved General and Desktop
5 Posts 2 Posters 276 Views 1 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • yy_pc_programmerY Offline
    yy_pc_programmerY Offline
    yy_pc_programmer
    wrote on last edited by
    #1

    btnitemdelegate.h file;

    #ifndef BTNITEMDELEGATE_H
    #define BTNITEMDELEGATE_H
    
    #include <QItemDelegate>
    #include <QObject>
    #include <QModelIndex>
    #include <QStyleOptionButton>
    #include <QStyleOptionViewItem>
    #include <QPainter>
    #include <QItemDelegate>
    #include <QSqlQueryModel>
    #include <QPushButton>
    #include <QApplication>
    #include <QMouseEvent>
    #include <QDialog>
    #include <QMessageBox>
    #include <QEvent>
    
    class btnItemDelegate : public QItemDelegate
    {
        Q_OBJECT
    public:
        btnItemDelegate(const QString key,QObject *parent = nullptr);
    
        QWidget *createEditor(QWidget *parent, const QStyleOptionViewItem &option, const QModelIndex &index) const override;
        //void setEditorData(QWidget *editor, const QModelIndex &index) const override;
        //void setModelData(QWidget *editor, QAbstractItemModel *model, const QModelIndex &index) const override;
        void updateEditorGeometry(QWidget *editor, const QStyleOptionViewItem &option, const QModelIndex &index) const override;
        void paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const override;
        bool editorEvent(QEvent *event, QAbstractItemModel *model, const QStyleOptionViewItem &option, const QModelIndex &mindex);
    
    signals:
        void clickedDeleteBtnSignal(const QModelIndex &mindex);
        void clickedUpdateBtnSignal(const QModelIndex &mindex);
    
    private:
        QString _key="";
        QWidget *editor = nullptr;
    };
    
    #endif // BTNITEMDELEGATE_H
    

    btnitemdelegate.cpp file;

    #include "btnitemdelegate.h"
    #include "mainpage.h"
    #include "cstmbtnstyloption.h"
    #include "update.h"
    #include <QLabel>
    #include <QHBoxLayout>
    #include <QStyledItemDelegate>
    #include <QMessageBox>
    
    btnItemDelegate::btnItemDelegate(const QString key,QObject *parent) : QItemDelegate{parent},_key(key)
    {
    
        //Update *update = new Update();
    
        //connect(this, &btnItemDelegate::clickedUpdateBtnSignal, this, &Update::updateBtnClickedSlot);
    }
    
    QWidget *btnItemDelegate::createEditor(QWidget *parent, const QStyleOptionViewItem &option, const QModelIndex &index) const
    {
        QWidget *editor = new QWidget(parent);
        QHBoxLayout *layout = new QHBoxLayout(editor);
        layout->setContentsMargins(0, 0, 0, 0);
    
        QPushButton *deleteBtn = new QPushButton("Sil", editor);
        QPushButton *updateBtn = new QPushButton("Güncelle", editor);
    
        layout->addWidget(deleteBtn);
        layout->addWidget(updateBtn);
    
        editor->setLayout(layout);
        return editor;
    }
    
    void btnItemDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const
    {
        if(_key=="delete")
        {
            CstmBtnStylOption deleteButtonOption;
           // QStyleOptionButton deleteButtonOption;
            QRect deleteRect = option.rect;//hücrenin dikdörtgeni
            int x,y,w,h;
            x = deleteRect.left() + deleteRect.width() - 90;// X coordinate
            y = deleteRect.top();
            w = 80;
            h = 30;
            deleteButtonOption.rect = QRect(x,y,w,h); // Sil düğmesi konumu
            deleteButtonOption.features = QStyleOptionButton::None; // Düğme özellikleri
            deleteButtonOption.state = QStyle::State_Enabled; // Düğme durumu
    
            QIcon icon(":/icon/icons/deletebtn.png");
            deleteButtonOption.icon = icon;
            deleteButtonOption.iconSize = QSize(25,25);
    
            deleteButtonOption.palette.setColor(QPalette::Button, deleteButtonOption.getBtnColor());
            QApplication::style()->drawControl( QStyle::CE_PushButton, &deleteButtonOption, painter);
        }
        else if(_key=="guncelle")
        {
            CstmBtnStylOption updateButtonOption;
            //QStyleOptionButton updateButtonOption;
            QRect updateRect = option.rect;//hücrenin dikdörtgeni
            int x2,y2,w2,h2;
            x2 = updateRect.left() + updateRect.width() - 90;// X coordinate
            y2 = updateRect.top();
            w2 = 80;
            h2 = 30;
            updateButtonOption.rect = QRect(x2,y2,w2,h2);
            updateButtonOption.features = QStyleOptionButton::None; //Düğme özellikleri
            updateButtonOption.state = QStyle::State_Enabled; //Düğme durumu
    
            QIcon icon2(":/icon/icons/updatebutton.png");
            updateButtonOption.icon = icon2;
            updateButtonOption.iconSize = QSize(25,25);
    
            updateButtonOption.palette.setColor(QPalette::Button, updateButtonOption.getBtnColor());
            QApplication::style()->drawControl( QStyle::CE_PushButton, &updateButtonOption, painter);
        }
        else{
            qDebug()<<"tanimsiz key";
        }
    }
    
    /*void btnItemDelegate::setEditorData(QWidget *editor, const QModelIndex &index) const
    {
    
    }*/
    
    /*void btnItemDelegate::setModelData(QWidget *editor, QAbstractItemModel *model, const QModelIndex &index) const
    {
    
    }*/
    
    void btnItemDelegate::updateEditorGeometry(QWidget *editor, const QStyleOptionViewItem &option, const QModelIndex &index) const
    {
        editor->setGeometry(option.rect);
    }
    
    bool btnItemDelegate::editorEvent(QEvent *event, QAbstractItemModel *model, const QStyleOptionViewItem &option, const QModelIndex &mindex)
    {
        Q_UNUSED(model)
        Q_UNUSED(option)
        Q_UNUSED(mindex)
    
        if (_key == "guncelle" && event->type() == QEvent::MouseButtonRelease)
        {
            emit clickedUpdateBtnSignal(mindex); // Güncelle düğmesi tıklama sinyali
            //return true;
    
            //yeni sinyal
            //emit Update::updateBtnClickedSlot(index);
            qDebug()<<"event update sinyal ok";
        }
    
        /*CstmBtnStylOption updateButtonOption;
        updateButtonOption.rect = option.rect;
    
        if (event->type() == QEvent::MouseButtonPress)
        {
            //mouse tıklaması
            updateButtonOption.state |= QStyle::State_Sunken;
        }
    
        if (event->type() == QEvent::MouseButtonRelease)
        {
            //mouse tıklamasını bırakınca
            updateButtonOption.state &= ~QStyle::State_Sunken;
        }
    
        /*if (event->type() == QEvent::MouseButtonDblClick)
        {
    
        }
    
        //buton rengi
        updateButtonOption.palette.setColor(QPalette::Button, Qt::blue);
    
        //butonu tekrar çizmek için QPainter update etme
        QPainter painter(editor);
        QApplication::style()->drawControl(QStyle::CE_PushButton, &updateButtonOption, &painter, editor);*/
    
        //return true;
        return QItemDelegate::editorEvent(event, model, option, mindex); //default
    }
    

    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 addBtn_Page_Clicked();
        void onStatus();
        void detailBtn_Page_Clicked();
        void clickedLogOutBtn_Clicked();
        void updateTableView();
        void myview_stil_layout();
    
    public slots:
        void updateBtnClickedSlot(const QModelIndex &mindex);
        void deleteBtnClickedSlot(const QModelIndex &mindex);
        //int sevkHesaplama();
    
    public:
        Ui::MainPage *ui;
    
        AddPage *add;
        DetailPage *detail;
        QSqlDatabase mydb;
        QSqlQueryModel *queryModel;
        QSqlQueryModel *queryModelDelete;
        QStandardItemModel *itemModelBtn;
        QPushButton *deleteBtn;
        QPushButton *updateBtn;
        const int ID={};
    };
    
    #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();
    
        onStatus();
    
        updateTableView();
    
        connect(ui->logOutBtn,&QPushButton::clicked,this,&MainPage::clickedLogOutBtn_Clicked);
    
        connect(ui->addBtn,&QPushButton::clicked,this,&MainPage::addBtn_Page_Clicked);
    
        connect(ui->detailBtn,&QPushButton::clicked,this,&MainPage::detailBtn_Page_Clicked);
    
        btnItemDelegate *btnDlgte = new btnItemDelegate("delete",ui->myView);
    
        connect(btnDlgte, &btnItemDelegate::clickedDeleteBtnSignal, this, &MainPage::deleteBtnClickedSlot);
        connect(btnDlgte, &btnItemDelegate::clickedUpdateBtnSignal,this, &MainPage::updateBtnClickedSlot); //updatePage
    
        queryModel->insertColumn(queryModel->columnCount());
        queryModel->setHeaderData(queryModel->columnCount()-1, Qt::Horizontal, tr("Sil"));
    
        ui->myView->setItemDelegateForColumn(queryModel->columnCount()-1,btnDlgte); //ok
    
        btnItemDelegate *btnUpdate = new btnItemDelegate("guncelle",ui->myView);
        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()
    {
        add->setWindowTitle("Add Page");
        add->setWindowIcon(QIcon(":/icon/icons/add.png"));
        add->setWindowFlags( Qt::WindowMinimizeButtonHint);
        add->setModal(true);
        add->adjustSize();
        add->setFixedSize(1000,150);
        add->show();
    }
    
    void MainPage::onStatus()
    {
        add = new AddPage();
        detail = new DetailPage();
    }
    
    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"<<"Admin Adı"<<"Admin Parola"<<"Kullanıcı Adı"<<"Kullanıcı Parola"<<"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, this); //id yi update e iletme
    
            update->setWindowTitle("Update Page");
            update->setWindowIcon(QIcon(":/icon/icons/updatepage.png"));
            update->setWindowFlags( Qt::WindowMinimizeButtonHint | Qt::WindowCloseButtonHint);
            update->setModal(true);
            update->adjustSize();
            update->setFixedSize(1000,150);
            update->show();
        }else {
            qDebug()<<"error index";
        }
    }
    
    void MainPage::deleteBtnClickedSlot(const QModelIndex &mindex)
    {
        int rowIndex = mindex.row();
    
        QModelIndex modelIndex = queryModel->index(rowIndex,0);
        const int ID = queryModel->data(modelIndex,Qt::DisplayRole).toInt();
    
        QSqlQuery deleteQuery;
        deleteQuery.prepare("DELETE FROM iplikler WHERE ID = :secilenID ");
        deleteQuery.bindValue(":secilenID",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();
        }
    }
    
    /*int MainPage::sevkHesaplama()
    {
    }*/
    
    MainPage::~MainPage()
    {
        delete ui;
    }
    

    update.h file;

    #ifndef UPDATE_H
    #define UPDATE_H
    
    #include <QDialog>
    #include "mainpage.h"
    
    namespace Ui {
    class Update;
    }
    
    class Update : public QDialog
    {
        Q_OBJECT
    
    public:
        explicit Update(int itemID,QWidget *parent = nullptr);
        ~Update();
    
    public slots:
        void updateBtnClickedSlot(const QModelIndex &mindex);
    
    signals:
        void clickedUpdateBtnSignal(const QModelIndex &mindex); //yeni sinyal tanımlama
    
    private:
        Ui::Update *ui;
    };
    
    #endif // UPDATE_H
    

    update.cpp file;

    #include "update.h"
    #include "ui_update.h"
    #include "btnitemdelegate.h"
    //#include "mainpage.h"
    
    #include <QAbstractItemModel>
    #include <QStyleOptionViewItem>
    
    Update::Update(int itemID,QWidget *parent) :
        QDialog(parent),
        ui(new Ui::Update)
    {
        ui->setupUi(this);
    }
    
    Update::~Update()
    {
        delete ui;
    }
    
    void Update::updateBtnClickedSlot(const QModelIndex &mindex)
    {
        if (mindex.isValid())
        {
            int rowIndex = mindex.row();
            qDebug() << "Güncelle butonuna tıklandı. Satır indeksi: " << rowIndex;
    
            //burada Update sınıfını kullanarak güncelleme işlemleri
            Update *update;
            update->setWindowTitle("Update Page");
            update->setWindowIcon(QIcon(":/icon/icons/updatepage.png"));
            update->setWindowFlags( Qt::WindowMinimizeButtonHint | Qt::WindowCloseButtonHint);
            update->setModal(true);
            update->adjustSize();
            update->setFixedSize(1000,150);
            update->show();
        }else {
            qDebug()<<"error index";
        }
    }
    

    The classes and codes I created are as above. I want to do this. I want to send a signal to the mainpage class by triggering an event from the btnitemdelegate class. I want to forward the signal coming to this mainpage class to the update class. I want to start the update process with this signal. How can I do that? Thanks

    Christian EhrlicherC 1 Reply Last reply
    0
    • yy_pc_programmerY yy_pc_programmer

      btnitemdelegate.h file;

      #ifndef BTNITEMDELEGATE_H
      #define BTNITEMDELEGATE_H
      
      #include <QItemDelegate>
      #include <QObject>
      #include <QModelIndex>
      #include <QStyleOptionButton>
      #include <QStyleOptionViewItem>
      #include <QPainter>
      #include <QItemDelegate>
      #include <QSqlQueryModel>
      #include <QPushButton>
      #include <QApplication>
      #include <QMouseEvent>
      #include <QDialog>
      #include <QMessageBox>
      #include <QEvent>
      
      class btnItemDelegate : public QItemDelegate
      {
          Q_OBJECT
      public:
          btnItemDelegate(const QString key,QObject *parent = nullptr);
      
          QWidget *createEditor(QWidget *parent, const QStyleOptionViewItem &option, const QModelIndex &index) const override;
          //void setEditorData(QWidget *editor, const QModelIndex &index) const override;
          //void setModelData(QWidget *editor, QAbstractItemModel *model, const QModelIndex &index) const override;
          void updateEditorGeometry(QWidget *editor, const QStyleOptionViewItem &option, const QModelIndex &index) const override;
          void paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const override;
          bool editorEvent(QEvent *event, QAbstractItemModel *model, const QStyleOptionViewItem &option, const QModelIndex &mindex);
      
      signals:
          void clickedDeleteBtnSignal(const QModelIndex &mindex);
          void clickedUpdateBtnSignal(const QModelIndex &mindex);
      
      private:
          QString _key="";
          QWidget *editor = nullptr;
      };
      
      #endif // BTNITEMDELEGATE_H
      

      btnitemdelegate.cpp file;

      #include "btnitemdelegate.h"
      #include "mainpage.h"
      #include "cstmbtnstyloption.h"
      #include "update.h"
      #include <QLabel>
      #include <QHBoxLayout>
      #include <QStyledItemDelegate>
      #include <QMessageBox>
      
      btnItemDelegate::btnItemDelegate(const QString key,QObject *parent) : QItemDelegate{parent},_key(key)
      {
      
          //Update *update = new Update();
      
          //connect(this, &btnItemDelegate::clickedUpdateBtnSignal, this, &Update::updateBtnClickedSlot);
      }
      
      QWidget *btnItemDelegate::createEditor(QWidget *parent, const QStyleOptionViewItem &option, const QModelIndex &index) const
      {
          QWidget *editor = new QWidget(parent);
          QHBoxLayout *layout = new QHBoxLayout(editor);
          layout->setContentsMargins(0, 0, 0, 0);
      
          QPushButton *deleteBtn = new QPushButton("Sil", editor);
          QPushButton *updateBtn = new QPushButton("Güncelle", editor);
      
          layout->addWidget(deleteBtn);
          layout->addWidget(updateBtn);
      
          editor->setLayout(layout);
          return editor;
      }
      
      void btnItemDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const
      {
          if(_key=="delete")
          {
              CstmBtnStylOption deleteButtonOption;
             // QStyleOptionButton deleteButtonOption;
              QRect deleteRect = option.rect;//hücrenin dikdörtgeni
              int x,y,w,h;
              x = deleteRect.left() + deleteRect.width() - 90;// X coordinate
              y = deleteRect.top();
              w = 80;
              h = 30;
              deleteButtonOption.rect = QRect(x,y,w,h); // Sil düğmesi konumu
              deleteButtonOption.features = QStyleOptionButton::None; // Düğme özellikleri
              deleteButtonOption.state = QStyle::State_Enabled; // Düğme durumu
      
              QIcon icon(":/icon/icons/deletebtn.png");
              deleteButtonOption.icon = icon;
              deleteButtonOption.iconSize = QSize(25,25);
      
              deleteButtonOption.palette.setColor(QPalette::Button, deleteButtonOption.getBtnColor());
              QApplication::style()->drawControl( QStyle::CE_PushButton, &deleteButtonOption, painter);
          }
          else if(_key=="guncelle")
          {
              CstmBtnStylOption updateButtonOption;
              //QStyleOptionButton updateButtonOption;
              QRect updateRect = option.rect;//hücrenin dikdörtgeni
              int x2,y2,w2,h2;
              x2 = updateRect.left() + updateRect.width() - 90;// X coordinate
              y2 = updateRect.top();
              w2 = 80;
              h2 = 30;
              updateButtonOption.rect = QRect(x2,y2,w2,h2);
              updateButtonOption.features = QStyleOptionButton::None; //Düğme özellikleri
              updateButtonOption.state = QStyle::State_Enabled; //Düğme durumu
      
              QIcon icon2(":/icon/icons/updatebutton.png");
              updateButtonOption.icon = icon2;
              updateButtonOption.iconSize = QSize(25,25);
      
              updateButtonOption.palette.setColor(QPalette::Button, updateButtonOption.getBtnColor());
              QApplication::style()->drawControl( QStyle::CE_PushButton, &updateButtonOption, painter);
          }
          else{
              qDebug()<<"tanimsiz key";
          }
      }
      
      /*void btnItemDelegate::setEditorData(QWidget *editor, const QModelIndex &index) const
      {
      
      }*/
      
      /*void btnItemDelegate::setModelData(QWidget *editor, QAbstractItemModel *model, const QModelIndex &index) const
      {
      
      }*/
      
      void btnItemDelegate::updateEditorGeometry(QWidget *editor, const QStyleOptionViewItem &option, const QModelIndex &index) const
      {
          editor->setGeometry(option.rect);
      }
      
      bool btnItemDelegate::editorEvent(QEvent *event, QAbstractItemModel *model, const QStyleOptionViewItem &option, const QModelIndex &mindex)
      {
          Q_UNUSED(model)
          Q_UNUSED(option)
          Q_UNUSED(mindex)
      
          if (_key == "guncelle" && event->type() == QEvent::MouseButtonRelease)
          {
              emit clickedUpdateBtnSignal(mindex); // Güncelle düğmesi tıklama sinyali
              //return true;
      
              //yeni sinyal
              //emit Update::updateBtnClickedSlot(index);
              qDebug()<<"event update sinyal ok";
          }
      
          /*CstmBtnStylOption updateButtonOption;
          updateButtonOption.rect = option.rect;
      
          if (event->type() == QEvent::MouseButtonPress)
          {
              //mouse tıklaması
              updateButtonOption.state |= QStyle::State_Sunken;
          }
      
          if (event->type() == QEvent::MouseButtonRelease)
          {
              //mouse tıklamasını bırakınca
              updateButtonOption.state &= ~QStyle::State_Sunken;
          }
      
          /*if (event->type() == QEvent::MouseButtonDblClick)
          {
      
          }
      
          //buton rengi
          updateButtonOption.palette.setColor(QPalette::Button, Qt::blue);
      
          //butonu tekrar çizmek için QPainter update etme
          QPainter painter(editor);
          QApplication::style()->drawControl(QStyle::CE_PushButton, &updateButtonOption, &painter, editor);*/
      
          //return true;
          return QItemDelegate::editorEvent(event, model, option, mindex); //default
      }
      

      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 addBtn_Page_Clicked();
          void onStatus();
          void detailBtn_Page_Clicked();
          void clickedLogOutBtn_Clicked();
          void updateTableView();
          void myview_stil_layout();
      
      public slots:
          void updateBtnClickedSlot(const QModelIndex &mindex);
          void deleteBtnClickedSlot(const QModelIndex &mindex);
          //int sevkHesaplama();
      
      public:
          Ui::MainPage *ui;
      
          AddPage *add;
          DetailPage *detail;
          QSqlDatabase mydb;
          QSqlQueryModel *queryModel;
          QSqlQueryModel *queryModelDelete;
          QStandardItemModel *itemModelBtn;
          QPushButton *deleteBtn;
          QPushButton *updateBtn;
          const int ID={};
      };
      
      #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();
      
          onStatus();
      
          updateTableView();
      
          connect(ui->logOutBtn,&QPushButton::clicked,this,&MainPage::clickedLogOutBtn_Clicked);
      
          connect(ui->addBtn,&QPushButton::clicked,this,&MainPage::addBtn_Page_Clicked);
      
          connect(ui->detailBtn,&QPushButton::clicked,this,&MainPage::detailBtn_Page_Clicked);
      
          btnItemDelegate *btnDlgte = new btnItemDelegate("delete",ui->myView);
      
          connect(btnDlgte, &btnItemDelegate::clickedDeleteBtnSignal, this, &MainPage::deleteBtnClickedSlot);
          connect(btnDlgte, &btnItemDelegate::clickedUpdateBtnSignal,this, &MainPage::updateBtnClickedSlot); //updatePage
      
          queryModel->insertColumn(queryModel->columnCount());
          queryModel->setHeaderData(queryModel->columnCount()-1, Qt::Horizontal, tr("Sil"));
      
          ui->myView->setItemDelegateForColumn(queryModel->columnCount()-1,btnDlgte); //ok
      
          btnItemDelegate *btnUpdate = new btnItemDelegate("guncelle",ui->myView);
          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()
      {
          add->setWindowTitle("Add Page");
          add->setWindowIcon(QIcon(":/icon/icons/add.png"));
          add->setWindowFlags( Qt::WindowMinimizeButtonHint);
          add->setModal(true);
          add->adjustSize();
          add->setFixedSize(1000,150);
          add->show();
      }
      
      void MainPage::onStatus()
      {
          add = new AddPage();
          detail = new DetailPage();
      }
      
      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"<<"Admin Adı"<<"Admin Parola"<<"Kullanıcı Adı"<<"Kullanıcı Parola"<<"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, this); //id yi update e iletme
      
              update->setWindowTitle("Update Page");
              update->setWindowIcon(QIcon(":/icon/icons/updatepage.png"));
              update->setWindowFlags( Qt::WindowMinimizeButtonHint | Qt::WindowCloseButtonHint);
              update->setModal(true);
              update->adjustSize();
              update->setFixedSize(1000,150);
              update->show();
          }else {
              qDebug()<<"error index";
          }
      }
      
      void MainPage::deleteBtnClickedSlot(const QModelIndex &mindex)
      {
          int rowIndex = mindex.row();
      
          QModelIndex modelIndex = queryModel->index(rowIndex,0);
          const int ID = queryModel->data(modelIndex,Qt::DisplayRole).toInt();
      
          QSqlQuery deleteQuery;
          deleteQuery.prepare("DELETE FROM iplikler WHERE ID = :secilenID ");
          deleteQuery.bindValue(":secilenID",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();
          }
      }
      
      /*int MainPage::sevkHesaplama()
      {
      }*/
      
      MainPage::~MainPage()
      {
          delete ui;
      }
      

      update.h file;

      #ifndef UPDATE_H
      #define UPDATE_H
      
      #include <QDialog>
      #include "mainpage.h"
      
      namespace Ui {
      class Update;
      }
      
      class Update : public QDialog
      {
          Q_OBJECT
      
      public:
          explicit Update(int itemID,QWidget *parent = nullptr);
          ~Update();
      
      public slots:
          void updateBtnClickedSlot(const QModelIndex &mindex);
      
      signals:
          void clickedUpdateBtnSignal(const QModelIndex &mindex); //yeni sinyal tanımlama
      
      private:
          Ui::Update *ui;
      };
      
      #endif // UPDATE_H
      

      update.cpp file;

      #include "update.h"
      #include "ui_update.h"
      #include "btnitemdelegate.h"
      //#include "mainpage.h"
      
      #include <QAbstractItemModel>
      #include <QStyleOptionViewItem>
      
      Update::Update(int itemID,QWidget *parent) :
          QDialog(parent),
          ui(new Ui::Update)
      {
          ui->setupUi(this);
      }
      
      Update::~Update()
      {
          delete ui;
      }
      
      void Update::updateBtnClickedSlot(const QModelIndex &mindex)
      {
          if (mindex.isValid())
          {
              int rowIndex = mindex.row();
              qDebug() << "Güncelle butonuna tıklandı. Satır indeksi: " << rowIndex;
      
              //burada Update sınıfını kullanarak güncelleme işlemleri
              Update *update;
              update->setWindowTitle("Update Page");
              update->setWindowIcon(QIcon(":/icon/icons/updatepage.png"));
              update->setWindowFlags( Qt::WindowMinimizeButtonHint | Qt::WindowCloseButtonHint);
              update->setModal(true);
              update->adjustSize();
              update->setFixedSize(1000,150);
              update->show();
          }else {
              qDebug()<<"error index";
          }
      }
      

      The classes and codes I created are as above. I want to do this. I want to send a signal to the mainpage class by triggering an event from the btnitemdelegate class. I want to forward the signal coming to this mainpage class to the update class. I want to start the update process with this signal. How can I do that? Thanks

      Christian EhrlicherC Offline
      Christian EhrlicherC Offline
      Christian Ehrlicher
      Lifetime Qt Champion
      wrote on last edited by
      #2

      Create a signal in MainPage, connect it to a slot in Update when you create the object and emit the newly created signal when the signal from the delegates comes in.

      Qt Online Installer direct download: https://download.qt.io/official_releases/online_installers/
      Visit the Qt Academy at https://academy.qt.io/catalog

      yy_pc_programmerY 1 Reply Last reply
      2
      • Christian EhrlicherC Christian Ehrlicher

        Create a signal in MainPage, connect it to a slot in Update when you create the object and emit the newly created signal when the signal from the delegates comes in.

        yy_pc_programmerY Offline
        yy_pc_programmerY Offline
        yy_pc_programmer
        wrote on last edited by
        #3

        @Christian-Ehrlicher Thank you for your answers. Could you please show what you said with an example? Thanks.

        Christian EhrlicherC 1 Reply Last reply
        0
        • yy_pc_programmerY yy_pc_programmer

          @Christian-Ehrlicher Thank you for your answers. Could you please show what you said with an example? Thanks.

          Christian EhrlicherC Offline
          Christian EhrlicherC Offline
          Christian Ehrlicher
          Lifetime Qt Champion
          wrote on last edited by
          #4

          @yy_pc_programmer said in Sending the signal to the classes I created in order:

          Could you please show what you said with an example? Thanks.

          Waht exactly? You already defined signals and slots in your other classes so do so in your Update and MainPage classes and connect them as you already did elsewhere.

          Qt Online Installer direct download: https://download.qt.io/official_releases/online_installers/
          Visit the Qt Academy at https://academy.qt.io/catalog

          yy_pc_programmerY 1 Reply Last reply
          0
          • Christian EhrlicherC Christian Ehrlicher

            @yy_pc_programmer said in Sending the signal to the classes I created in order:

            Could you please show what you said with an example? Thanks.

            Waht exactly? You already defined signals and slots in your other classes so do so in your Update and MainPage classes and connect them as you already did elsewhere.

            yy_pc_programmerY Offline
            yy_pc_programmerY Offline
            yy_pc_programmer
            wrote on last edited by
            #5

            @Christian-Ehrlicher I understand now. thanks

            1 Reply Last reply
            0
            • yy_pc_programmerY yy_pc_programmer has marked this topic as solved on

            • Login

            • Login or register to search.
            • First post
              Last post
            0
            • Categories
            • Recent
            • Tags
            • Popular
            • Users
            • Groups
            • Search
            • Get Qt Extensions
            • Unsolved