在QStackedWidget中更改小部件

时间:2012-08-20 21:16:11

标签: c++ qt

我在堆叠的小部件中有2个自定义小部件,我希望能够从一个更改为另一个按下按钮,但是当我当前单击它时,程序才会终止。

这是第一个自定义小部件.cpp:

 #include "loginpage.h"
 #include "ui_loginpage.h"

 #include "mainwindow.h"
 #include "mainpage.h"

 #include "QtGui"


 LoginPage::LoginPage(QWidget *parent) :
QWidget(parent),
ui(new Ui::LoginPage)
 {
     ui->setupUi(this);


     connect(ui->loginPushButton, SIGNAL(clicked()), this, SLOT(doLogin()));
 }

 LoginPage::~LoginPage()
 {
     delete ui;
 }

 QString LoginPage::getUsername()
 {
     QString userName = ui->usernameLineEdit->text();
     return userName;
 }

 QString LoginPage::getPassword()
 {
     QString passWord = ui->passwordLineEdit->text();
     return passWord;
 }

 void LoginPage::doLogin()
 {
     QString username = getUsername();
     QString password = getPassword();
     bool check = checkCredentials(password, username);

     if(check == true)
     {
         MainWindow *main;
         main = new MainWindow;
         main->test();

     }else
     {
         QMessageBox::information(this, tr("incorrect"), tr("incorrect"));
     }


 }

...

这是主窗口.cpp:

 #include "mainwindow.h"
 #include "ui_mainwindow.h"
 #include "loginpage.h"
 #include "ui_loginpage.h"

 #include "mainpage.h"

 #include <QtGui>

 MainWindow::MainWindow(QWidget *parent) :
     QMainWindow(parent),
     ui(new Ui::MainWindow)
 {

     ui->setupUi(this);

 }

 MainWindow::~MainWindow()
 {
     delete ui;
 }

 void MainWindow::test()
 {
     ui->stackedWidget->setCurrentIndex(1);

 }

任何帮助表示赞赏

2 个答案:

答案 0 :(得分:0)

我认为你的意思是它崩溃而不是终止。在你写的doLogin()

MainWindow *main;
main->test();

但是那时main仍然是一个空指针。因此调用test()毫无意义。因此,您的程序可能会崩溃。

答案 1 :(得分:0)

首先qDebug()是Qt程序员的朋友,你可以放qDebug() << "In x function"并查看代码所在的位置。无法看到您的UI文件或错误发生时我猜你正在将QStackedWidget的currentIndex设置为1,只有一个窗口小部件关联。仔细检查UI是否设置正确,并检查调试跟踪以查看它崩溃的位置。