gpt4 book ai didi

c++ - 在不同屏幕之间切换

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:55:22 24 4
gpt4 key购买 nike

我有一个包含几个屏幕的应用程序,我想在应用程序启动时加载这些屏幕,并在程序运行时将其保存在内存中。我希望能够通过单击按钮在屏幕之间切换,在显示下一个屏幕时隐藏当前屏幕。没有通过应用程序的直接路径,用户可以在应用程序中的屏幕之间来回切换。我正在使用 Qt 和 c++ 新手。

以下是我想要开始工作的框架代码(或获得有关更好的方法的建议)。我这样做是为了避免在应用程序中多次来回移动时创建对话框的新实例而造成内存泄漏。

当我编译它时,我在 Screen2->show(); 中收到错误 Undefined Reference to 'Screen2';在 dialog1.cpp 的 Dialog1::on_pushButton_clicked() 中。我尽我所能使它编译但没有成功。为什么 Screen2 不是 dialog1.cpp 中的有效指针?

我有一个从 Main 运行并初始化对话框的管理器。

管理器.cpp:

#include "manager.h"
#include "ui_manager.h"

Manager::Manager(QWidget *parent) :
QDialog(parent),
ui(new Ui::Manager)
{
ui->setupUi(this);
Screen1 = new Dialog1(this);
Screen2 = new Dialog2(this);
Screen1->show();
}

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

ma​​nager.h:

#ifndef MANAGER_H
#define MANAGER_H
#include <QDialog>
#include "dialog1.h"
#include "dialog2.h"

namespace Ui {
class Manager;
}

class Manager : public QDialog
{
Q_OBJECT

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

Dialog1 *Screen1;
Dialog2 *Screen2;

private:
Ui::Manager *ui;
};

#endif // MANAGER_H

dialog1.cpp:

#include "dialog1.h"
#include "ui_dialog1.h"
#include "manager.h"
#include "dialog2.h"
#include <QDebug>

extern Dialog1 *Screen1;
extern Dialog2 *Screen2;

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

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

void Dialog1::on_pushButton_clicked()
{
Screen2->show();
}

dialog1.h:

#ifndef DIALOG1_H
#define DIALOG1_H

#include <QDialog>
#include "dialog2.h"

class Manager;

namespace Ui {
class Dialog1;
}

class Dialog1 : public QDialog
{
Q_OBJECT

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

private slots:
void on_pushButton_clicked();

private:
Ui::Dialog1 *ui;
};

#endif // DIALOG1_H

dialog2.cpp:

#include "dialog2.h"
#include "ui_dialog2.h"
#include "dialog1.h"
#include "manager.h"

extern Dialog1 *Screen1;
extern Dialog2 *Screen2;

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

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

void Dialog2::on_pushButton_clicked()
{
Screen1->show();
}

感谢所有帮助!

问候,詹姆斯

最佳答案

我将向您解释让它发挥作用的最简单方法。

  1. 使 screen1 和 screen2 成为经理类的私有(private)成员。
  2. 向两个屏幕添加信号 buttonPressed()。
  3. 在每个对话框中按下按钮时发出信号。
  4. 将插槽添加到管理器类以处理对话框中的按钮按下
  5. 将对话的信号连接到管理槽
  6. 在两个对话框中删除它:

    extern Dialog1 *Screen1;
    extern Dialog2 *Screen2;

您不能直接访问它们,因为它们是您的管理器对象的成员。

因此,您将能够添加任意数量的屏幕。每个屏幕都不会知道其他屏幕的任何信息(您正试图这样做)。

关于c++ - 在不同屏幕之间切换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20331774/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com