如何在qt中首先调用另一个表单

时间:2017-11-12 11:49:31

标签: mysql forms qt

我的qt 5.3.1&一个VM中的centos 6.6(x86)中的mysql客户端和第二个VM包含服务器Mysql。 在qt我想从第一种形式(“myappmanwindow.ui”)调用第二种形式(“tabledispalaydialog.ui”)

“tabledispalaydialog.ui”文件包含一个tableviewLoginForm(来自Qt创建者设计页面组件的tableview对象)

第一个表单是 - 登录表单(mainWindow):

enter image description here

显示查询结果的第二个表单: - tableview以第二种形式

enter image description here

现在我想在“myappmanwindow.ui”形式的登录按钮的信号“点击”中调用表格“tabledispalaydialog.ui”。

而且我想以第二种形式从mysql服务器显示“登录表”,查询  作为第一种形式的论据传递。

最后如何connect(this, SIGNAL(otherform(QString Query)),this, SLOT(callThisForm(QString Query)));

myappmainwindow.h: -

  #ifndef MYAPPMAINWINDOW_H
  #define MYAPPMAINWINDOW_H

  #include <QMainWindow>
  #include "tabledispalaydialog.h"
  #include <QSqlQueryModel>
  #include <QSqlDatabase>
  #include <QSqlDriver>
  #include <QMessageBox>
  #include <QSqlQuery>
  #include <QSqlRecord>
  #include <QMessageBox>

  namespace Ui {
  class MyappMainWindow;
  }

  class TableDispalayDialog;

  class MyappMainWindow : public QMainWindow
  {
      Q_OBJECT

  public:
      explicit MyappMainWindow(QWidget *parent = 0);
      ~MyappMainWindow();

  private:
      Ui::MyappMainWindow *ui;

      TableDispalayDialog *tableDisplayform;
      QSqlDatabase *db;

  signals:
      void otherform(QString Query);

  private slots:
      void on_pushButtonLogin_clicked();
  };

  #endif // MYAPPMAINWINDOW_H

tabledispalaydoialog.h: -

   #ifndef TABLEDISPALAYDIALOG_H
   #define TABLEDISPALAYDIALOG_H

   #include <QDialog>
   #include <QSqlQueryModel>

   namespace Ui {
   class TableDispalayDialog;
   }

   class TableDispalayDialog : public QDialog
   {
       Q_OBJECT

   public:
       explicit TableDispalayDialog(QWidget *parent = 0);
       ~TableDispalayDialog();



   private:
       Ui::TableDispalayDialog *ui;

       QSqlQueryModel *model;

   public slots:

       void callThisForm(QString Query);
   };       

   #endif        // TABLEDISPALAYDIALOG_H

myappmainwindow.cpp: -

  #include "myappmainwindow.h"
  #include "ui_myappmainwindow.h"

  MyappMainWindow::MyappMainWindow(QWidget *parent) :
      QMainWindow(parent),
      ui(new Ui::MyappMainWindow)
        {
            ui->setupUi(this);

            TableDispalayDialog *tableDisplayform = new         ableDispalayDialog();
      //connect(this, SIGNAL(otherform(QString Query)),tableDisplayform, SLOT(callThisForm(QString Query)));
      //connect(this, SIGNAL(otherform(QString Query)),, SLOT(callThisForm(QString Query)));

       db = new QSqlDatabase(QSqlDatabase::addDatabase("QMYSQL"));
       db->setDatabaseName("test");
       db->setHostName("oracle");
       db->setPort(3306);
       db->setUserName("rahul");
       db->setPassword("rahul");
  }

  MyappMainWindow::~MyappMainWindow()
  {
      db->close();
      delete ui;
  }

  void MyappMainWindow::on_pushButtonLogin_clicked()
  {
      QString susername = ui->lineEditUser->text();
      QString spassword = ui->lineEditPassword->text();
      QString strquery;

          strquery = "select * from tablelogin where user = \"" + susername.trimmed() +"\" " +" and password = \""+
                              spassword.trimmed()+ "\";";

      QMessageBox::information(this, "login button", strquery);
      }

和最后一个表tabledispalaydialog.cpp: -

   #include "tabledispalaydialog.h"
   #include "ui_tabledispalaydialog.h"

   TableDispalayDialog::TableDispalayDialog(QWidget *parent) :
       QDialog(parent),
       ui(new Ui::TableDispalayDialog)
   {
       ui->setupUi(this);
   }

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

   void  TableDispalayDialog::callThisForm(QString Query)
   {
       this->model = new QSqlQueryModel();
       this->model->setQuery(Query);
       this->ui->tableViewLoginForm->setModel(model);
       this->show();
       this->setModal(true);
       this->exec();
   }

如何在第一个表单(myappmanwindow)中按钮“登录”单击信号中调用第二个表单(TableDispalayDialog),并在表格TableDispalayDialog的tableview组件中具有登录表(来自mysql)的详细信息。

1 个答案:

答案 0 :(得分:0)

尝试使用QSignalMapper http://doc.qt.io/qt-5/qsignalmapper.html 发出像QString参数点击的信号 或者你可以简单地创建一个槽来调用表单并将字符串作为参数传递给表单构造函数 或者创建一个处理所有其他小部件的顶级小部件