MainScene::MainScene(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainScene) { ui->setupUi(this); //退出 connect(ui->actiontuic,&QAction::triggered,[=](){ this->close(); }); //新游戏 connect(ui->actiond,&QAction::triggered,[=](){ this->CreatNewGame(); }); //开发者信息 connect(ui->action1_2,&QAction::triggered,[=]{QMessageBox::information(this,"开发者信息","计算机学院20级10班 周姝畅"); }); //游戏说明 connect(ui->action1,&QAction::triggered,[=](){ QMessageBox::information(this,"游戏说明","按“↑”、“↓”、“←”、“→”对空白方块进行操作"); }); this->setFixedSize(480*ZOOM,640*ZOOM); this->setWindowIcon(QPixmap(":/game/MNLS.png")); this->setWindowTitle("拼图"); //打印输出框 init(); //显示拼图 this->update(); } 这一段代码能干什么,详细讲解一下
时间: 2024-04-03 22:31:06 浏览: 161
这段代码是一个 C++ Qt 框架下的 GUI 程序的主窗口类,它实现了以下功能:
1. 继承了 QMainWindow 类,作为 GUI 程序的主窗口;
2. 通过构造函数 MainScene::MainScene(QWidget *parent) 初始化了一个新的窗口,并使用 Ui::MainScene 类初始化了窗口界面 ui;
3. 实现了四个 QAction 的信号与槽连接,分别是退出、新游戏、开发者信息和游戏说明;
4. 通过 setFixedSize() 方法设置了窗口大小为 480*ZOOM x 640*ZOOM,其中 ZOOM 是一个宏定义的缩放比例,setWindowIcon() 方法设置了程序的图标,setWindowTitle() 方法设置了程序的标题;
5. 调用了 init() 方法进行初始化,init() 方法负责创建一个 3x3 的拼图,并对拼图进行随机打乱,init() 方法的具体实现在该类的其他方法中;
6. 最后调用了 update() 方法,更新并显示拼图界面。
相关问题
E:\bird\bird\bird\mainscene.cpp:84: warning: deleting array '((MainScene*)this)->MainScene::m_barriers' delete m_barriers; ^
这个警告通常是由于使用了错误的删除操作符导致的。
根据警告信息,你尝试使用 `delete` 删除了一个数组 `m_barriers`。然而,根据你的描述,`m_barriers` 应该是一个指针而不是指向数组的指针。
要想正确删除指向数组的指针,应该使用 `delete[]` 运算符而不是 `delete` 运算符。因此,你需要将 `delete m_barriers;` 改为 `delete[] m_barriers;`。
修正后的代码如下:
```cpp
// 删除数组指针时使用 delete[]
delete[] m_barriers;
```
这样就可以避免警告并正确地删除指向数组的指针。请确保只有在使用 `new[]` 运算符分配内存时才使用 `delete[]` 运算符来删除对应的数组。如果你使用的是普通的指针(而不是指向数组的指针),则应该使用 `delete` 运算符来进行删除。
#include "end.h" #include "ui_end.h" #include <QLabel> #include <QString> #include "barrier.h" #include "mainscene.h" end::end(QWidget *parent) : QWidget(parent), ui(new Ui::end) { ui->setupUi(this); } end::~end() { delete ui; } void end::on_pushButton_clicked() { close(); } void end::gets(int a){ s=a; ui->label->setText("score"); ui->label_2->setText(s); } gets成功被触发但 ui->label_2->setText(s);并没有成功,w.m_barriers[0].score 是否发送到s?
根据你提供的代码,`end::gets(int a)` 函数被成功触发,并且你将参数 `a` 的值赋给了 `s` 变量。然后,你尝试使用 `ui->label_2->setText(s)` 将标签的文本设置为 `s` 的值。
然而,根据你提供的代码,`ui->label_2` 并没有通过 `setupUi()` 函数初始化。通常,在使用 Qt Designer 创建界面时,会在自动生成的 `ui_end.h` 文件中定义并初始化这些 UI 元素。
请确保在 `end.ui` 文件中已经正确定义了 `label_2` 标签,并且已经使用 Qt Designer 生成了 `ui_end.h` 文件。然后,检查一下是否在 `end.ui` 文件中设置了正确的对象名称(Object Name)为 `label_2`。
另外,请确保在 `end.h` 中正确包含了 `ui_end.h` 头文件,并在构造函数 `end::end()` 中使用 `ui->setupUi(this)` 来初始化 UI 元素。
如果以上解决方案不适用,请提供更多与界面和标签相关的代码和上下文信息,以便我们能够更好地帮助你解决问题。关于 `w.m_barriers[0].score` 是否发送到 `s` 的问题,请确保在调用 `end::gets(int a)` 函数之前已经将信号与槽函数正确连接,并且信号传递了正确的参数。
阅读全文