我有3个表格(主表格,密码表格和菜单表格)。用户单击菜单以打开菜单表单,但在菜单表单显示之前,密码表单显示以验证用户。他可以显示RFID卡或输入他的ID和密码。
当他把卡片放入主要形式的套接字通知器时,收到RFID卡数据并将其发送到活动表格(我的活动表格是密码形式)。因此主表单将卡数据发送到lblrfid
:
if(f->windowTitle()=="PassDialog")
{
QLabel* lbl = f->findChild<QLabel*>("lblRFID");
//mf->processData(output);
lbl->setText(output);
return;
}
以密码形式我有一个插槽来验证RFID卡数据和打开菜单表格,如果卡有效。
void MyDialog::AcceptCard()
{
QString output=ui->lblRFID->text();
bool st=database->checkPassword(NULL,output,"1");
//this user is valid to go to menu page
//s/he is admin
if(st)
{
this->close();
menu *m=new menu();
m->showFullScreen();
}
}
我希望在标签文字更改后拨打AcceptCard
我怎么能这样做?
答案 0 :(得分:0)
提供的代码不是使用表单的最佳变体......
我认为密码表单是从代码中创建的?我是对的吗?
这是一个更好的代码示例(不是最好的cource):
代码可能包含错误!现在无法检查它!
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include "mydialog.h"
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
private slots:
void showPasswordDialog();
void gotRFID(QString output);
private:
Ui::MainWindow *ui;
MyDialog *passwordDialog;
};
#endif // MAINWINDOW_H
#include "mainwindow.h"
#include "ui_mainwindow.h"
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::showPasswordDialog()
{
passwordDialog = new MyDialog(this);
passwordDialog->show();
}
void MainWindow::gotRFID(QString output)
{
if (!passwordDialog) {
showPasswordDialog();
}
passwordDialog->setRFID(output);
}
#ifndef MYDIALOG_H
#define MYDIALOG_H
#include <QDialog>
namespace Ui {
class MyDialog;
}
class MyDialog : public QDialog
{
Q_OBJECT
public:
explicit MyDialog(QWidget *parent = 0);
~MyDialog();
public slots:
void AcceptCard();
void setRFID(QString data);
private:
Ui::MyDialog *ui;
};
#endif // MYDIALOG_H
#include "mydialog.h"
#include "ui_mydialog.h"
MyDialog::MyDialog(QWidget *parent) :
QDialog(parent),
ui(new Ui::MyDialog)
{
ui->setupUi(this);
setAttribute(Qt::WA_DeleteOnClose);
}
MyDialog::~MyDialog()
{
delete ui;
}
void MyDialog::AcceptCard()
{
QString output=ui->lblRFID->text();
bool st=database->checkPassword(NULL,output,"1");
//this user is valid to go to menu page
//s/he is admin
if (st)
{
this->close();
menu *m=new menu();
m->showFullScreen();
}
}
void MyDialog::setRFID(QString data)
{
ui->lblRFID->setText(data);
AcceptCard();
}
修改强>
您可以将f
投射到MyDialog
if(f->windowTitle()=="PassDialog")
{
MyDialog *tempDialog = qobject_cast<MyDialog*>(f);
tempDialog->setRFID(output);
return;
}