我想链接两个页面,当程序运行并在单击“确定”后显示欢迎页面时,下一页出现。 这是我的代码,但我不知道为什么会出错!!!!有什么问题?
欢迎.h:
#ifndef WIDGET_H
#define WIDGET_H
#include <QWidget>
#include <QLabel>
#include <QPushButton>
class welcome : public QWidget
{
Q_OBJECT
public:
welcome(QWidget *parent = 0);
QLabel *wel;
QPushButton *ok;
public slots:
void open();
};
#endif // WIDGET_H
欢迎.cpp:
#include "welcome.h"
#include "login.h"
welcome::welcome(QWidget *parent)
: QWidget(parent)
{
this->setWindowTitle("Welcome");
this->resize(250,120);
wel = new QLabel("Welcome to your program",this);
wel->setGeometry(65,30,150,20);
ok = new QPushButton("Ok",this);
ok->setGeometry(95,70,60,23);
login w;
connect(this->ok,SIGNAL(clicked()),w,SLOT(open()));
}
void welcome :: open()
{
login w;
w.show();
}
登录.h:
#ifndef LOGIN_H
#define LOGIN_H
#include <QWidget>
#include <QLabel>
#include <QLineEdit>
#include <QCheckBox>
#include <QPushButton>
class login : public QWidget
{
Q_OBJECT
public:
login(QWidget *parent = 0);
QLabel *user,*pass;
QLineEdit *inuser,*inpass;
QCheckBox *showpass;
QPushButton *ok,*reg;
};
#endif // LOGIN_H
登录.cpp:
#include "login.h"
login::login(QWidget *parent)
: QWidget(parent)
{
this->setWindowTitle("Login");
this->resize(300,150);
user = new QLabel("insert your username :",this);
user->setGeometry(10,20,120,20);
pass = new QLabel("insert your password :",this);
pass->setGeometry(10,50,120,20);
inuser = new QLineEdit(this);
inuser->setGeometry(130,20,150,20);
inpass = new QLineEdit(this);
inpass->setGeometry(130,50,150,20);
showpass = new QCheckBox("show password",this);
showpass->setGeometry(130,80,100,15);
ok = new QPushButton("login",this);
ok->setGeometry(125,110,50,25);
reg = new QPushButton("register",this);
reg->setGeometry(180,110,50,25);
}
最佳答案
connect
需要一个指针(指向 QObject
)而不是一个对象,这就是您看到错误消息的原因。正如 Valeri Atamaniouk 所提到的,您提供 w
本地存储持续时间这一事实也是致命的。您需要使 w
成为 welcome
的成员并在堆上声明它。还要注意析构函数的添加:
#ifndef WIDGET_H
#define WIDGET_H
#include <QWidget>
#include <QLabel>
#include <QPushButton>
#include "login.h"
class welcome : public QWidget
{
Q_OBJECT
public:
welcome(QWidget *parent = 0);
~welcome();
QLabel *wel;
QPushButton *ok;
public slots:
void open();
private:
login* w;
};
#endif //WIDGET_H
欢迎.cpp:
#include "welcome.h"
welcome::welcome(QWidget *parent)
: QWidget(parent), w(new login)
{
this->setWindowTitle("Welcome");
this->resize(250,120);
wel = new QLabel("Welcome to your program",this);
wel->setGeometry(65,30,150,20);
ok = new QPushButton("Ok",this);
ok->setGeometry(95,70,60,23);
connect(this->ok,SIGNAL(clicked()),w,SLOT(open()));
}
welcome::~welcome()
{
delete w;
}
void welcome :: open()
{
w->show();
}
关于c++ - 该程序(Qt)的信号和插槽问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16615694/