我正在嘗試使用堆結構創建一個小游戲,并且我正在使用 QT Widget Application,我的問題是:我有一個類 Pile 需要使用 Pile p1(size) 進行初始化,并且在按鈕時獲得“大小” “創建”被推送。問題是:當我這樣做時,我的物件 p1 將是 PushButton 函式獨有的,因此我的程式的其他函式無法訪問 p1,因為它會在 PushButton 函式結束時消失,我需要使用其他函式訪問 p1我的 mainwindow.cpp 中的函式。
如何解決這個問題呢?我需要以不同的方式初始化 p1 嗎?
uj5u.com熱心網友回復:
許多可能的解決方案之一。假設該類Pile不是 aQObject并且您需要創建此類的復數實體,我們將需要這樣的容器來存盤這些Piles。有標準容器,也有 Qt 自己的容器模板QList,它是串列、向量和佇列的混合體。
確保在 mainwindow.h 標頭中使用 QList:
#include <QList>
在MainWindow類中宣告成員變數:
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函式會破壞創建的物件,您可以從其他成員函式訪問它們。
這種簡單方法的缺點是什么?QList按值將類復制Pile到其動態存盤中。您的 Pile 類必須是可正確復制的或至少是微不足道的。QList隱藏了很多它對物件和存盤所做的事情,如果物件足夠大,可能不會連續存盤。
如果 Pile 是 Qt 類,則故事略有不同。
QList 的值型別必須是可賦值的資料型別。這涵蓋了大多數常用的資料型別,但編譯器不會讓您,例如,將 QWidget 存盤為值;相反,存盤一個 QWidget *.
QObject如果您希望將其與 a 一起使用,則必須使用指向 a 的指標QList。盡管 Qt 提供了在父物件停止存在時自動釋放的機制,但必須正確分配和釋放物件。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/448138.html
標籤:C qt qpushbutton
上一篇:使用QT的C庫
