我有3个表单(主表单、密码表单和菜单表单)。用户单击菜单打开菜单窗体,但在菜单窗体显示之前,将显示密码窗体以验证用户。他可以显示RFID卡或输入他的身份证和密码。
当他把卡放在主窗体中时,socket通知程序接收RFID卡数据并将其发送到活动窗体(我的活动窗体是password form)。所以主表单将卡片数据发送到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
。我该怎么做?
最佳答案
如果代码不是使用表单的最佳变体。。。
我认为密码表单主要是由代码创建的?我说的对吗?
下面是一个更好的代码示例(不是最好的代码):
代码可以包含错误!现在没有能力检查!
主窗口.h
#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
主窗口.cpp
#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);
}
我的对话.h
#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
mydialog.cpp
#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;
}
关于c++ - 标签文本更改时如何发出信号?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38114575/