Странное автоматическое нажатие qpushbutton

#c #qt #qpushbutton

#c #qt #qpushbutton

Вопрос:

Я пытался изучить c и qt framework, создавая программное обеспечение для торговых точек project.my в главном окне есть несколько вкладок, и на одной вкладке у меня есть кнопка qpushbutton, которая открывает диалоговое окно новой покупки, которое принимает ввод от пользователя для записи новой покупки у поставщика. в этом диалоговом окне новой покупки есть строкакоторый, когда получает штрих-код продукта из считывателя штрих-кодов, запускает другое диалоговое окно quantity, которое пользователь может использовать для ввода количества продукта. но когда я нажимаю ok в поле кнопки диалогового окна количества вместо закрытия только диалогового окна количества, он также закрывает диалоговое окно новой покупки. я отладил приложение qt, и оно показывает, что qpushbutton (который сохраняет и закрывает диалоговое окно новой покупки) в диалоговом окне newpuchase запускается автоматически. кроме того, это поведениеобнаруживается только при запуске диалогового окна количества через строку штрих-кода, у меня есть другая строка, которая принимает описание продукта и запускает то же диалоговое окно количества, но нажатие кнопки ok при запуске диалогового окна количества через строку описания не закрывает диалоговое окно новой покупки или не запускает qpushbutton, который сохраняет и закрывает диалоговое окно новой покупки.я прикрепляю снимки экрана диалогового окна и код для диалоговых окон

на mainwindow.cpp

    void MainWindow::on_pushButton_clicked()
{
    newpurchase mypurchase;
    connect(amp;mypurchase,SIGNAL(purchase_added()),this,SLOT(update_view()));
    mypurchase.exec();
}
  

диалоговое
окно новой покупки newpurchase.cpp

 #include "newpurchase.h"
#include "ui_newpurchase.h"
#include <QtDebug>
#include <qtablewidget.h>
#include <QSqlQuery>
#include <QSqlError>
#include <QSqlRecord>
#include <QCompleter>
#include <QObject>
#include <QWidget>
#include <QDate>

newpurchase::newpurchase(QWidget *parent) :
    QDialog(parent),
    ui(new Ui::newpurchase)
{
    ui->setupUi(this);
    QSqlQuery qry;
    qry.prepare("select description from product");
    if(!qry.exec())
    {
        qDebug() << "error getting description from product";
    }
    QStringList items;
    while(qry.next())
    {
        items <<qry.value(0).toString();
    }
    QCompleter *completer =new QCompleter(items,this);
    completer->setCaseSensitivity(Qt::CaseInsensitive);
    ui->lineEdit_descripion->setCompleter(completer);
  connect(completer,static_cast<void (QCompleter::*)(const QStringamp;)>(amp;QCompleter::activated),
               [amp;](const QString amp;text)->void

    {
        newpurchase::clear(text);
    });

    QSqlQuery supqry;
    supqry.prepare("select supplier_name from supplier");
    if(!supqry.exec())
    {
        qDebug() << "error getting suppliername from supplier";
    }
    QStringList supitems;
    while(supqry.next())
    {
        supitems <<supqry.value(0).toString();
    }
    QCompleter *supcompleter =new QCompleter(supitems,this);
    supcompleter->setCaseSensitivity(Qt::CaseInsensitive);
    ui->lineEdit_sup->setCompleter(supcompleter);
}

newpurchase::~newpurchase()
{
    delete ui;
}

void newpurchase::on_lineEdit_barcode_returnPressed()
{
    if(!ui->lineEdit_sale->text().isEmpty() amp;amp; !ui->lineEdit_sup->text().isEmpty() amp;amp; !ui->lineEdit_inv->text().isEmpty())
    {
        quantity_dialog quandialog;
        connect(amp;quandialog,SIGNAL(purdetails(QString)),this,SLOT(code(QString)));
       quandialog.exec();
    }
    else
    {

        Errdialog myerror("please provide supplier and invoice" );
        myerror.exec();
    }
}
void newpurchase::saveDataIntoTable(QString item,double price,int quantity,QString code,QString date)
{
    double rupee =price*quantity*1.00;
    //qDebug() <<date;

    QString mrp= QString::number(rupee,'f',2);
    QString qty= QString::number(quantity);
    QString prc= QString::number(price);
    // QString kod= QString::number(code);

    if (!ui->tableWidget)
        return;

    const int currentRow = ui->tableWidget->rowCount();
    ui->tableWidget->setRowCount(currentRow   1);

    ui->tableWidget->setItem(currentRow, 0, new QTableWidgetItem(item));
    ui->tableWidget->setItem(currentRow, 1, new QTableWidgetItem(prc));
    ui->tableWidget->setItem(currentRow, 2, new QTableWidgetItem(qty));
    ui->tableWidget->setItem(currentRow, 3, new QTableWidgetItem(mrp));
    ui->tableWidget->setItem(currentRow, 4, new QTableWidgetItem(code));
    ui->tableWidget->setItem(currentRow, 5, new QTableWidgetItem(date));

    double total=ui->label_3->text().toDouble();
    total = total rupee;
    ui->label_3->setText(QString::number(total,'f',2));



}
void newpurchase::clear(QString item)
{
    if(!item.isEmpty())
    {
        if(!ui->lineEdit_des->text().isEmpty() amp;amp; !ui->lineEdit_sup->text().isEmpty() amp;amp; !ui->lineEdit_inv->text().isEmpty())
        {
            quantity_dialog quandialog;
            connect(amp;quandialog,SIGNAL(purdetails(QString)),this,SLOT(descr(QString)));
            quandialog.exec();

        }
        else
        {

            Errdialog myerror("please provide supplier and invoice" );
            myerror.exec();
        }
    }
}

void newpurchase::descr(QString q)
{
    QStringList elements = q.split(':');
    QSqlQuery qry;
    qry.prepare("select * from product where description='" ui->lineEdit_des->text() "'");
    if(!qry.exec())
    {
        qDebug() << "error getting table product";
    }
    if (qry.next())
    {
        QString result=qry.value(1).toString();
        double cost= elements[1].toDouble();
        QString itemco=qry.value(2).toString();
        int quan=elements[0].toInt();
        QString mfd=elements[2];
        saveDataIntoTable(result,cost,quan,itemco,mfd);
        ui->lineEdit_des->clear();
    }
}
void newpurchase::on_pushButton_clicked()
{

    QItemSelectionModel *select =ui->tableWidget->selectionModel();
    int row = select->selectedRows().takeFirst().row();
    double rupee=ui->tableWidget->item(row,3)->text().toDouble();
    ui->tableWidget->removeRow(row);
    double total=ui->label_3->text().toDouble();
    total = total-rupee;
    ui->label_3->setText(QString::number(total,'f',2));


}

void newpurchase::on_lineEdit_des_returnPressed()
{
}
void newpurchase::code(QString q)
{

    QStringList elements = q.split(':');

    QSqlQuery qry;
    qry.prepare("select * from product where code=" ui->lineEdit_sale->text());
    if(!qry.exec())
    {
        qDebug() << "error getting table product";
    }
    if (qry.next())
    {
        QString result=qry.value(1).toString();
        double cost= elements[2].toDouble();
        QString itemco=qry.value(2).toString();
        int quan=elements[0].toInt();
        QString mfd=elements[1];


        saveDataIntoTable(result,cost,quan,itemco,mfd);

    }


    ui->lineEdit_sale->clear();
}




void newpurchase::on_pushButton_2_clicked()
{

    QString datetime= QDateTime::currentDateTime().toString("yyyy-MM-dd hh:mm:ss");
    QString supplier=ui->lineEdit_sup->text();
    QString invoice=ui->lineEdit_inv->text();
    int numrow=ui->tableWidget->rowCount();
   // qDebug() << numrow;

    for (int i = 0; i < numrow; i  )
    {

        QSqlQuery query;
        query.prepare("SELECT MAX(Id) FROM stock_transaction");
        if(!query.exec())
        {
            qDebug() << "error getting id";
        }
        int id=0 ;
        if (query.next())
        {
            id=query.value(0).toInt() 1;
        }

        QString coder=ui->tableWidget->item(i,4)->text();
        QString qua=ui->tableWidget->item(i,2)->text();
        double rate=ui->tableWidget->item(i,1)->text().toDouble();
        QString date= ui->tableWidget->item(i,5)->text();
        QString d=QString::number(id);
        QString batch=supplier "_" invoice "_" d;

        QSqlQuery querysale;

        querysale.prepare("INSERT INTO stock_transaction(id,code,stock,mfd,supplier,invoice,cost,date_time) VALUES(:id,:code,:stock,:mfd,:supplier,:invoice,:cost,:date_time)");

        querysale.bindValue(":id", id);
        querysale.bindValue(":code",coder);
        querysale.bindValue(":stock", qua.toInt());
        querysale.bindValue(":mfd",date);
        querysale.bindValue(":supplier", supplier);
        querysale.bindValue(":invoice", invoice);
        querysale.bindValue(":cost", rate*1.00);
        querysale.bindValue(":date_time", datetime);



        if(!querysale.exec())
        {
            qDebug() << "error recording sale";
        }
        
    }
    emit this->purchase_added();
    close();

}
  

диалог количества

quantity.cpp

 #include "quantity_dialog.h"
    #include "ui_quantity_dialog.h"

     quantity_dialog::quantity_dialog(QWidget *parent) :
                                QDialog(parent),
                                ui(new Ui::quantity_dialog)
                            {
                                ui->setupUi(this);
                                ui->lineEdit_quan->setFocus();
                                ui->buttonBox->setEnabled(false);
                                connect(ui->lineEdit_quan, SIGNAL(textChanged(QString)), this, SLOT(checkLineEdits()));
                                connect(ui->dateEdit, SIGNAL(dateChanged(QDate)), this, SLOT(checkLineEdits()));
                                connect(ui->lineEdit_3, SIGNAL(textChanged(QString)), this, SLOT(checkLineEdits()));
                            }
                            
                            quantity_dialog::~quantity_dialog()
                            {
                                delete ui;
                            }
                            
                            void quantity_dialog::on_buttonBox_accepted()
                            {
                                emit purdetails(ui->lineEdit_quan->text() ":" ui->dateEdit->text() ":" ui->lineEdit_3->text());
                            
                            
                                ui->lineEdit_quan->clear();
                            
                            }
  

Пожалуйста, дайте мне знать, если я могу предоставить какие-либо другие подробности

Комментарии:

1. Очень сложно читать текст без знаков препинания.

2. Извините, если я могу показаться грубым, но ваш вопрос слишком запутан. Не могли бы вы быть более краткими?

Ответ №1:

было установлено свойство auto по умолчанию для автоматического нажатия qpushbutton. изменение этого свойства решило мою проблему