i've centos 6.6 as server and client in vm ware. one has mysql server and other has client mysql. i've two dialogs in client. one is "MyAppMainWindow" and other one is "MyDialog". problenm is that when i want to create MyDialog's object in MyAppMainWindow implementation file "myappmainwindow.cpp" programm crashes.
here is myappmainwindow.cpp
messageboxes as only to track error.
#include "myappmainwindow.h"
#include "ui_myappmainwindow.h"
MyAppMainWindow
::MyAppMainWindow(QWidget *parent
) : ui(new Ui::MyAppMainWindow)
{
ui->setupUi(this);
db->setHostName("oracle");
db->setDatabaseName("test");
//db->setDatabaseName("music");
db->setUserName("rahul");
db->setPassword("rahul");
db->setPort(3306);
//mydlg = new MyDialog(this);
}
MyAppMainWindow::~MyAppMainWindow()
{
db->close();
delete ui;
}
void MyAppMainWindow::on_pushButtonLogin_clicked()
{
QString su
= ui
->lineEditUser
->text
().
trimmed();
QString sp
= ui
->lineEditPassword
->text
().
trimmed();
str = "select *from tablelogin where user = \"" + su + "\" and password = \"" + sp +"\";";
if(db->open() )
{
if(query->exec())
{
int count = 0;
while(query->next())
count++;
if(count == 1)
{
QMessageBox::information(this,
"sqlqueymodel",
"user name and password is correct");
model->setQuery(*query);
ui->tableViewLogin->setModel(model);
QMessageBox::information(this,
"sqlqueymodel",
"ui->tableViewLogin->setModel(model);");
mydlg = new MyDialog(this);//here program crashes
QMessageBox::information(this,
"sqlqueymodel",
" mydlg = new MyDialog(this);");
mydlg->setModal(true);
mydlg->exec();
}
else if( count > 1 )
QMessageBox::information(this,
"sqlqueymodel",
"duplicate username ... access denied ");
else
QMessageBox::critical(this,
"sqlqueymodel",
"user name or password is not correct");
}
}
else
{
QMessageBox::critical(this,
"db->open", db
->lastError
().
text().
trimmed());
}
db->close();
}
void MyAppMainWindow::on_pushButtonSecondForm_clicked()
{
this->hide();
mydlg = new MyDialog(this);
mydlg->setModal(true);
mydlg->exec();
}
{
return (db = this->db);
}
#include "myappmainwindow.h"
#include "ui_myappmainwindow.h"
MyAppMainWindow::MyAppMainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MyAppMainWindow)
{
ui->setupUi(this);
db = new QSqlDatabase(QSqlDatabase::addDatabase("QMYSQL"));
db->setHostName("oracle");
db->setDatabaseName("test");
//db->setDatabaseName("music");
db->setUserName("rahul");
db->setPassword("rahul");
db->setPort(3306);
query = new QSqlQuery(*db);
model = new QSqlQueryModel(this);
//mydlg = new MyDialog(this);
}
MyAppMainWindow::~MyAppMainWindow()
{
db->close();
delete ui;
}
void MyAppMainWindow::on_pushButtonLogin_clicked()
{
QString str;
QString su = ui->lineEditUser->text().trimmed();
QString sp = ui->lineEditPassword->text().trimmed();
str = "select *from tablelogin where user = \"" + su + "\" and password = \"" + sp +"\";";
if(db->open() )
{
query = new QSqlQuery(str, *db);
if(query->exec())
{
int count = 0;
while(query->next())
count++;
if(count == 1)
{
QMessageBox::information(this, "sqlqueymodel", "user name and password is correct");
model->setQuery(*query);
ui->tableViewLogin->setModel(model);
QMessageBox::information(this, "sqlqueymodel", "ui->tableViewLogin->setModel(model);");
mydlg = new MyDialog(this);//here program crashes
QMessageBox::information(this, "sqlqueymodel", " mydlg = new MyDialog(this);");
mydlg->setModal(true);
mydlg->exec();
}
else if( count > 1 )
QMessageBox::information(this, "sqlqueymodel", "duplicate username ... access denied ");
else
QMessageBox::critical(this, "sqlqueymodel", "user name or password is not correct");
}
}
else
{
QMessageBox::critical(this, "db->open", db->lastError().text().trimmed());
}
db->close();
}
void MyAppMainWindow::on_pushButtonSecondForm_clicked()
{
this->hide();
mydlg = new MyDialog(this);
mydlg->setModal(true);
mydlg->exec();
}
QSqlDatabase * MyAppMainWindow::open_db(QSqlDatabase *db)
{
return (db = this->db);
}
To copy to clipboard, switch view to plain text mode
myappaminwindow.h
-------------------
#include <QtDebug>
#include <QSqlDriver>
#include <QSqlError>
#include <QSqlQueryModel>
#include <QMessageBox>
#include "mydialog.h"
namespace Ui {
class MyAppMainWindow;
}
//class MyDialog;
{
Q_OBJECT
public:
explicit MyAppMainWindow
(QWidget *parent
= 0);
~MyAppMainWindow();
private slots:
void on_pushButtonLogin_clicked();
void on_pushButtonSecondForm_clicked();
public slots:
private:
Ui::MyAppMainWindow *ui;
MyDialog *mydlg;
};
#endif // MYAPPMAINWINDOW_H
#include <QtDebug>
#include <QSqlDriver>
#include <QSqlError>
#include <QSqlQueryModel>
#include <QMessageBox>
#include "mydialog.h"
namespace Ui {
class MyAppMainWindow;
}
//class MyDialog;
class MyAppMainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MyAppMainWindow(QWidget *parent = 0);
~MyAppMainWindow();
private slots:
void on_pushButtonLogin_clicked();
void on_pushButtonSecondForm_clicked();
public slots:
QSqlDatabase *open_db(QSqlDatabase *db);
private:
Ui::MyAppMainWindow *ui;
QSqlDatabase *db;
QSqlQuery *query;
QSqlQueryModel *model;
MyDialog *mydlg;
};
#endif // MYAPPMAINWINDOW_H
To copy to clipboard, switch view to plain text mode
mydialog.h
#ifndef MYDIALOG_H
#define MYDIALOG_H
#include <QDialog>
//#include "myappmainwindow.h"
#include <QSqlQuery>
#include <QSqlDatabase>
#include <QtSql>
namespace Ui {
class MyDialog;
}
class MyAppMainWindow;
{
Q_OBJECT
public:
explicit MyDialog
(QWidget *parent
= 0);
~MyDialog();
void fillcombo();
signals:
private slots:
void on_pushButton_clicked();
void on_comboBoxEmployee_currentTextChanged
(const QString &arg1
);
private:
Ui::MyDialog *ui;
MyAppMainWindow *mywindow;
};
#endif // MYDIALOG_H
#ifndef MYDIALOG_H
#define MYDIALOG_H
#include <QDialog>
//#include "myappmainwindow.h"
#include <QSqlQuery>
#include <QSqlDatabase>
#include <QtSql>
namespace Ui {
class MyDialog;
}
class MyAppMainWindow;
class MyDialog : public QDialog
{
Q_OBJECT
public:
explicit MyDialog(QWidget *parent = 0);
~MyDialog();
void fillcombo();
signals:
void open_db(QSqlDatabase *dbdlg);
private slots:
void on_pushButton_clicked();
void on_comboBoxEmployee_currentTextChanged(const QString &arg1);
private:
Ui::MyDialog *ui;
MyAppMainWindow *mywindow;
QSqlQuery *query;
QSqlDatabase *dbdlg;
};
#endif // MYDIALOG_H
To copy to clipboard, switch view to plain text mode
mydialog.cpp
#include "mydialog.h"
#include "ui_mydialog.h"
#include "myappmainwindow.h"
MyDialog
::MyDialog(QWidget *parent
) : ui(new Ui::MyDialog)
{
ui->setupUi(this);
mywindow = new MyAppMainWindow(this);
//mywindow->db->open();
emit open_db(dbdlg);
fillcombo();
}
MyDialog::~MyDialog()
{
delete ui;
}
void MyDialog::on_pushButton_clicked()
{
QString strname
= ui
->lineEditUserName
->text
().
trimmed();
ui->comboBoxEmployee->addItem(strname);
}
void MyDialog
::on_comboBoxEmployee_currentTextChanged(const QString &arg1
) {
//ui->labelUserNameCombo->setText(ui->comboBoxEmployee->currentText().trimmed());
ui->lineEditUserName->setText(arg1);
}
void MyDialog::fillcombo()
{
//if(mywindow->db->open())
if(dbdlg->open())
{
QString str
= "select user\ name from tableEmployeeData;";
if(this->query->exec())
while(this->query->next())
ui->comboBoxEmployee->addItem(this->query->value(1).toString());
}
}
#include "mydialog.h"
#include "ui_mydialog.h"
#include "myappmainwindow.h"
MyDialog::MyDialog(QWidget *parent) :
QDialog(parent),
ui(new Ui::MyDialog)
{
ui->setupUi(this);
mywindow = new MyAppMainWindow(this);
//mywindow->db->open();
connect(this, SIGNAL(open_db(QSqlDatabase *)), mywindow, SLOT(open_db(QSqlDatabase *)) );
emit open_db(dbdlg);
this->query = new QSqlQuery(*dbdlg);
fillcombo();
}
MyDialog::~MyDialog()
{
delete ui;
}
void MyDialog::on_pushButton_clicked()
{
QString strname = ui->lineEditUserName->text().trimmed();
ui->comboBoxEmployee->addItem(strname);
}
void MyDialog::on_comboBoxEmployee_currentTextChanged(const QString &arg1)
{
//ui->labelUserNameCombo->setText(ui->comboBoxEmployee->currentText().trimmed());
ui->lineEditUserName->setText(arg1);
}
void MyDialog::fillcombo()
{
//if(mywindow->db->open())
if(dbdlg->open())
{
QString str = "select user\ name from tableEmployeeData;";
this->query = new QSqlQuery(str, *dbdlg);
if(this->query->exec())
while(this->query->next())
ui->comboBoxEmployee->addItem(this->query->value(1).toString());
}
}
To copy to clipboard, switch view to plain text mode
#include "myappmainwindow.h"
#include <QApplication>
int main(int argc, char *argv[])
{
MyAppMainWindow w;
w.show();
return a.exec();
}
#include "myappmainwindow.h"
#include <QApplication>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MyAppMainWindow w;
w.show();
return a.exec();
}
To copy to clipboard, switch view to plain text mode
how to solve this problem.
Bookmarks