我有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/

10-11 05:17