标签文字改变时如何发出信号?

时间:2016-06-30 05:24:32

标签: c++ linux forms qt

我有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 我怎么能这样做?

1 个答案:

答案 0 :(得分:0)

提供的代码不是使用表单的最佳变体......

我认为密码表单是从代码中创建的?我是对的吗?

这是一个更好的代码示例(不是最好的cource):

代码可能包含错误!现在无法检查它!

mainwindow.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

mainwindow.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);
}

mydialog.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;
}