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

まずqDebug()、Qt プログラマーの友人ですqDebug() << "In x function"。コードを配置して、どこに救済されているかを確認できます。UI ファイルを表示できない場合、またはエラーが発生した場合、関連付けられているウィジェットが 1 つしかない場合、QStackedWidget の currentIndex を 1 に設定していると思います。UI が正しくセットアップされていることを再確認し、デバッグ トレースをチェックして、クラッシュしている場所を確認します。

于 2012-08-21T08:02:32.530 に答える
0

終了するのではなくクラッシュするという意味だと思います。あなたの中doLogin()

MainWindow *main;
main->test();

しかし、その時点mainではまだ null ポインターです。だから呼んtest()でも意味がない。その結果、プログラムがクラッシュする可能性があります。

于 2012-08-20T21:20:09.277 に答える