更改QStackedWidget中的小部件

Changing widget in QStackedWidget

本文关键字:小部 QStackedWidget 更改      更新时间:2023-10-16

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

这是第一个自定义小部件.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);
 }

感谢的任何帮助

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

MainWindow *main;
main->test();

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

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