QT按钮创建对象
QT push button to create object
我正在尝试使用桩结构创建一个小游戏,我正在使用 QT Widget 应用程序,我的问题是:我有一个 class 桩需要用 Pile p1(size) 初始化,当按下“创建”按钮时获得“大小”。问题是:当我这样做时,我的对象 p1 将专用于 PushButton 函数,因此我程序的其他函数无法访问 p1,因为它会在 PushButton 函数结束后立即消失,我需要与其他函数一起访问 p1来自我的 mainwindow.cpp.
的功能
如何解决这个问题?我需要以不同方式初始化 p1 吗?
许多可能的解决方案之一。假设 class Pile
不是 QObject
并且您需要创建此 class 的多个实例,我们需要这样的容器来存储那些 Pile
。有标准的容器,也有Qt自己的容器模板QList
,是list、vector和queue.
的混合体
确保在 mainwindow.h header:
中使用 QList
#include <QList>
在MainWindow
class声明成员变量:
QList<Pile> piles;
在处理点击信号的函数中:
void MainWindow::buttonClick() {
Pile p(size);
// do some stuff with p
piles.append(p); // or just piles.append(Pile(size));
// instead of creating separate copy Pile p(size);
}
就是这样。 MainWindow
的析构函数会销毁创建的 objects,您可以从其他成员函数访问它们。
这种简单方法的缺点是什么? QList
将 Pile
class 按值复制到其动态存储中。您的 Pile class 必须可以正确复制或至少是微不足道的。 QList
隐藏了它对 object 和存储所做的很多事情,如果 object 足够大,可能不会连续存储。
如果 Pile 是 Qt,则情况略有不同 class。
QList's value type must be an assignable data type. This covers most
data types that are commonly used, but the compiler won't let you, for
example, store a QWidget as a value; instead, store a QWidget *.
如果您想将它与 QList
一起使用,则必须使用指向 QObject
的指针。 object 必须正确分配和释放,尽管 Qt 提供了当 parent object 停止存在时自动释放的机制。
我正在尝试使用桩结构创建一个小游戏,我正在使用 QT Widget 应用程序,我的问题是:我有一个 class 桩需要用 Pile p1(size) 初始化,当按下“创建”按钮时获得“大小”。问题是:当我这样做时,我的对象 p1 将专用于 PushButton 函数,因此我程序的其他函数无法访问 p1,因为它会在 PushButton 函数结束后立即消失,我需要与其他函数一起访问 p1来自我的 mainwindow.cpp.
的功能如何解决这个问题?我需要以不同方式初始化 p1 吗?
许多可能的解决方案之一。假设 class Pile
不是 QObject
并且您需要创建此 class 的多个实例,我们需要这样的容器来存储那些 Pile
。有标准的容器,也有Qt自己的容器模板QList
,是list、vector和queue.
确保在 mainwindow.h header:
中使用 QList#include <QList>
在MainWindow
class声明成员变量:
QList<Pile> piles;
在处理点击信号的函数中:
void MainWindow::buttonClick() {
Pile p(size);
// do some stuff with p
piles.append(p); // or just piles.append(Pile(size));
// instead of creating separate copy Pile p(size);
}
就是这样。 MainWindow
的析构函数会销毁创建的 objects,您可以从其他成员函数访问它们。
这种简单方法的缺点是什么? QList
将 Pile
class 按值复制到其动态存储中。您的 Pile class 必须可以正确复制或至少是微不足道的。 QList
隐藏了它对 object 和存储所做的很多事情,如果 object 足够大,可能不会连续存储。
如果 Pile 是 Qt,则情况略有不同 class。
QList's value type must be an assignable data type. This covers most data types that are commonly used, but the compiler won't let you, for example, store a QWidget as a value; instead, store a QWidget *.
如果您想将它与 QList
一起使用,则必须使用指向 QObject
的指针。 object 必须正确分配和释放,尽管 Qt 提供了当 parent object 停止存在时自动释放的机制。