0

我的堆叠小部件中有 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);

 }

任何帮助表示赞赏

4

2 回答 2

0

我假设您的意思是它崩溃而不是终止。在你的doLogin()你写

MainWindow *main;
main->test();

但此时main仍然是一个空指针。所以打电话test()是没有意义的。结果,您的程序很可能会崩溃。

于 2012-08-20T21:20:09.277 回答
0

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

于 2012-08-21T08:02:32.530 回答