在qt中显示stackwidget并隐藏它

时间:2015-07-12 19:01:38

标签: c++ qt

我想在按钮中单击一个包含一些信息的stackwidget。

然而,这样做有困难。 我有2个文件:mainwindow.cpp和ppualert.cpp,我想在用户单击主窗口中的按钮时打开文件ppualert。 (像html中的div)

我的主要问题:stackwidget总是显示,他的按钮没有响应。

我做错了什么? BTW我无法在另一个不同的窗口打开它,因为我正在使用qt linux embedded和eglfs插件,它将小部件直接写入帧缓冲区并限制在一个窗口。

这是代码:

MainWindow.cpp:

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include "ppualert.h"


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

 ppu = new ppuAlert(this);
 connect(ppu,&ppuAlert::ppuDialogClosed,this,&MainWindow::onPPUDialogClosed);
 ui->swPPU->addWidget(new ppuAlert);
 ui->swPPU->hide();
}


void MainWindow::on_btnShowPPU_clicked()
{
   ui->swPPU->setCurrentIndex(0);
   ui->swPPU->show();
}
void MainWindow::onPPUDialogClosed()
{
   ui->swPPU->hide();
}

ppualert.cpp:

#include "ppualert.h"
#include "ui_ppualert.h"

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

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

void ppuAlert::on_pushButton_5_clicked()
{
   emit ppuDialogClosed();
}

MainWindow.h:

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include "ppualert.h"

namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
Q_OBJECT

public:
  explicit MainWindow(QWidget *parent = 0);
  ~MainWindow();
  ppuAlert *ppu;
public slots:
  void on_btnShowPPU_clicked();
  void onPPUDialogClosed();
private:
  Ui::MainWindow *ui;
};

#endif // MAINWINDOW_H

ppualert.h:

#ifndef PPUALERT_H
#define PPUALERT_H

#include <QWidget>

namespace Ui {
class ppuAlert;
}

class ppuAlert : public QWidget
{
 Q_OBJECT

public:
   explicit ppuAlert(QWidget *parent = 0);
   ~ppuAlert();

private slots:
    void on_pushButton_5_clicked();

private:
   Ui::ppuAlert *ui;
signals:
   void ppuDialogClosed();
};

#endif // PPUALERT_H

1 个答案:

答案 0 :(得分:1)

  1. ppu = new ppuAlert(this);通过MainWindow的{​​{1}}家长会将ppuAlert嵌入ppuAlert ui

  2. 将其更改为MainWindow ui 现在,您可以将ppu = new ppuAlert();添加到堆叠小部件中并隐藏或显示它。

  3. 要隐藏stackWidget,请在MainWindow中添加它 ppuAlert

  4. 更改

    connect(ppu,SIGNAL(ppuDialogClosed()),this,SLOT(ppuDialogClosed()));
  5. 将此void MainWindow::onPPUDialogClosed() { ui->swPPU->setHidden(true); } 更改为ui->swPPU->addWidget(new ppuAlert);