我的qt 5.3.1&一个VM中的centos 6.6(x86)中的mysql客户端和第二个VM包含服务器Mysql。 在qt我想从第一种形式(“myappmanwindow.ui”)调用第二种形式(“tabledispalaydialog.ui”)
“tabledispalaydialog.ui”文件包含一个tableviewLoginForm(来自Qt创建者设计页面组件的tableview对象)
第一个表单是 - 登录表单(mainWindow):
显示查询结果的第二个表单: - tableview以第二种形式
现在我想在“myappmanwindow.ui”形式的登录按钮的信号“点击”中调用表格“tabledispalaydialog.ui”。
而且我想以第二种形式从mysql服务器显示“登录表”,查询 作为第一种形式的论据传递。
最后如何connect(this, SIGNAL(otherform(QString Query)),this, SLOT(callThisForm(QString Query)));
#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
#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
#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);
}
#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)的详细信息。
答案 0 :(得分:0)
尝试使用QSignalMapper http://doc.qt.io/qt-5/qsignalmapper.html 发出像QString参数点击的信号 或者你可以简单地创建一个槽来调用表单并将字符串作为参数传递给表单构造函数 或者创建一个处理所有其他小部件的顶级小部件