不知道为什么突然就到这个窗口(第一个窗口)就报程序异常,然后将下面有关mu的代码全部注释掉才不会报这个错误,但是,mu这个也声明过了并且也初始化了,为什么还要报这个错误呢?
mu=new menu(this);
QObject::connect(this,SIGNAL(sendStr(QString)),mu,SLOT(getStr(QString)));
emit this->sendStr(intelenum);
//场景转换
//隐藏当前窗口
this->hide();
//显示第二个窗口 menu菜单页
mu->show();
login.cpp
#include "login.h"
#include "bankpushbutton.h"
#include "bankregisterbutton.h"
#include "comparephone.h"
#include "telephone_multi_input.h"
//#include "staff_function.h"
#include <QPushButton>
#include <QTimer>
#include <QLineEdit>
#include <QDebug>
#include <QMessageBox>
#include <QTableWidget>
#include <QHeaderView>
#include <QVBoxLayout>
#include <QPainter>
#include <QPropertyAnimation>
#include <iostream>
#include <algorithm>
#include <string>
#include <sstream>
#include <fstream>
#include <cstdlib>
using namespace std;
string getgetStaffString(const QString qstr)
{
QByteArray cdata = qstr.toLocal8Bit();
return string(cdata);
}
login::login(QWidget *parent) : Bank_Widget(parent)
{
//telephonenumber图标
telephone_multi_input *tele_image=new telephone_multi_input(this);
//调整大小
tele_image->setFixedSize(60,60);
tele_image->setEnabled(false);
//调整位置
tele_image->move(this->width()*1/4-tele_image->width()*3/4,this->height()*1/5-tele_image->height()*3/4);
//手机号输入框
QLineEdit *telenum=new QLineEdit(this);
//设置输入框的大小
telenum->setFixedSize(200,40);
//设置输入框的最大长度
telenum->setMaxLength(11);
//设置输入框的提示语
telenum->setPlaceholderText("手机号");
//手机号输入框的位置
telenum->move(this->width()*1/3,this->height()*1/5-telenum->height()*4/5);
//登录按钮
bankPushButton *btnLogin=new bankPushButton(this);
btnLogin->resize(60,60);
//按钮的位置
//按钮水平位置居中,垂直位置在3/4处
//计算方式 x=窗口的宽度*3/4-按钮宽度*3/4 y=窗口的高度*2/5-按钮的高度/5(-btnLogin->height()*4/5)
btnLogin->move(this->width()*3/4-btnLogin->width()*3/4,this->height()*2/5-btnLogin->height()/5);
connect(btnLogin,&bankPushButton::clicked,[=](){
//虽然向右动画播放完成之后才会启用向左的动画
//但是若一直点击,时间差在150毫秒以内,很可能会出现向左动画覆盖向右动画
//所以通过设置按钮的可不可用来防止多次连续点击
//将按钮设置为不可用
btnLogin->setEnabled(false);
//播放向右
btnLogin->moveright();
//QTimer相当于一个定时器
//150为时间
//后面的lamda表达式为槽
QTimer::singleShot(150,[=](){
//播放向左
//向右的动画需要100毫秒才能播放完成
//而此处调用的向左走的动画会等不及向右走的动画播放完成就会播放
//导致了向左走的动画覆盖了向右走的动画
btnLogin->moveleft();
});
QTimer::singleShot(300,[=](){
//300毫秒后才设置为可用
btnLogin->setEnabled(true);
QString intelenum=telenum->text();
string num=intelenum.toStdString();
bool flag=compat(num);
qDebug()<<flag<<endl;
if(intelenum=="11111111111")
{
//场景转换
//隐藏当前窗口
this->hide();
//显示第二个窗口 银行职员菜单页
this->bSMM.show();
}
else if(flag)
{
int general=rand()%11;
int vip=rand()%11;
if(stateVipGeneral==1)
{
cout<<"mu==NULL ="<<(mu==NULL)<<endl;//mu==NULL =0
mu=new menu(this);
QObject::connect(this,SIGNAL(sendStr(QString)),mu,SLOT(getStr(QString)));
emit this->sendStr(intelenum);
cout<<"333333"<<endl;
//场景转换
//隐藏当前窗口
this->hide();
//显示第二个窗口 menu菜单页
mu->show();
}
else
{
QMessageBox::about(this, tr("排队"), "您为普通用户,当前您前面还有"+QString::number(general+vip)+"人,请耐心等待!");
QTimer::singleShot(2500+(general+vip)*10,[=](){
mu=new menu(this);
QObject::connect(this,SIGNAL(sendStr(QString)),mu,SLOT(getStr(QString)));
emit this->sendStr(intelenum);
//场景转换
//隐藏当前窗口
this->hide();
//显示第二个窗口 menu菜单页
mu->show();
});
}
}
else
QMessageBox::about(this, tr("ERROR"), tr("输入手机号错误!请重新输入或注册!"));
});
});
//注册按钮
bankregisterbutton *btnregister=new bankregisterbutton(this);
btnregister->resize(60,60);
btnregister->move(this->width()*1/4-btnLogin->width()*1/4,this->height()*2/5-btnLogin->height()/5);
connect(btnregister,&bankPushButton::clicked,[=](){
//虽然向右动画播放完成之后才会启用向左的动画
//但是若一直点击,时间差在150毫秒以内,很可能会出现向左动画覆盖向右动画
//所以通过设置按钮的可不可用来防止多次连续点击
//将按钮设置为不可用
btnregister->setEnabled(false);
//播放向右
btnregister->moveright();
//QTimer相当于一个定时器
//150为时间
//后面的lamda表达式为槽
QTimer::singleShot(150,[=](){
//播放向左
//向右的动画需要100毫秒才能播放完成
//而此处调用的向左走的动画会等不及向右走的动画播放完成就会播放
//导致了向左走的动画覆盖了向右走的动画
btnregister->moveleft();
});
QTimer::singleShot(300,[=](){
//300毫秒后才设置为可用
btnregister->setEnabled(true);
//场景转换
//隐藏当前窗口
this->hide();
//显示第二个窗口 menu菜单页
this->ln_rg.show();
});
});
}
login.h
#ifndef LOGIN_H
#define LOGIN_H
#include <QWidget>
#include <QString>
#include <iostream>
#include <string>
#include "bank_widget.h"
#include "menu.h"
#include "login_register.h"
#include "bank_stuff.h"
#include "bank_staff_manage_menu.h"
using namespace std;
class login : public Bank_Widget
{
Q_OBJECT
public:
explicit login(QWidget *parent = nullptr);
//void classIsOver();
signals:
void sendStr(QString);
public slots:
private:
menu *mu;
//menu mu;
login_register ln_rg;
bank_Staff_Manage_Menu bSMM;
};
#endif // LOGIN_H