c++ - 在qt中显示stackwidget并隐藏它

标签 c++ qt

我想在单击按钮时显示一个包含一些信息的堆栈小部件。

但是,执行此操作时遇到了麻烦。 我有 2 个文件:mainwindow.cpp 和 ppualert.cpp,我想在用户单击主窗口中的按钮时打开文件 ppualert。 (类似于 html 中的 div)

我的主要问题:stackwidget 一直显示,但他的按钮没有响应。

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

代码如下:

主窗口.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();
}

主窗口.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. ppu = new ppuAlert(this); 传递 ppuAlertMainWindow 父级将嵌入 ppuAlert uiMainWindow ui 上。

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

  3. 要隐藏 stackWidget ,将其添加到 MainWindow connect(ppu,SIGNAL(ppuDialogClosed()),this,SLOT(ppuDialogClosed()));

  4. 改变

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

关于c++ - 在qt中显示stackwidget并隐藏它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31371454/

相关文章:

c++ - 如何用 gcc 抑制 boost::thread 警告?

c++ - 骑士巡逻失误

C++ 错误 : map. insert(make_pair(struct, vector<struct>));

c++ - 数组运算符使用数组外的地址

QtCreator : Central "header" for source code (copyright, 作者)

c++ - 如何通过转发或移动捕获参数包?

qt - QMake:范围如何工作?

qt - 在 Qt 中,如何在菜单中显示键盘快捷键但禁用它们?

ios - iOS 13 中的亚洲字体是否损坏?

mysql - Qt 5.5 QSqlDatabase::open() 总是返回 true?