目的:在自定義的widget初始化完畢後,獲取其內部的button、combo等umg元件的c++指標。
這裡我們新建了乙個c++類,loginwidget,繼承自userwidget,然後新建了乙個widget藍圖loginwidgetbp,繼承自loginwidget c++ class。我們想在這個loginwidgetbp藍圖被例項化之後,獲取這個ui藍圖內的各個ui元件。
具體實現:
loginwidget.h
cpp**
bool initialize() override;
ucomboboxstring* comboserver;
ueditabletextbox* txtboxaccount;
ueditabletextbox* txtboxpwd;
假設我自己的widget叫loginwidget,繼承自:userwidget。
cpp**
uloginwidget::uloginwidget(const fobjectinitializer& objectinitializer) : super(objectinitializer)
bool uloginwidget::initialize()
if (ucomboboxstring* combo = cast(getwidgetfromname("comboserver")))
if (ueditabletextbox* txtbox = cast(getwidgetfromname("txtboxaccount")))
if (ueditabletextbox* txtbox = cast(getwidgetfromname("txtboxpwd")))
return
true;
}
其中,這個判斷是必須的,否則出現空指標異常:
cpp**
if (!super::initialize())
comboserver、txtboxaccount、txtboxpwd三個字串分別是widget元件id。另外也不用擔心各個元件的層級關係(比如,image a是button的子節點),widget藍圖中的所有元件存放在userwidget中的乙個map當中。
補充:
父類還有乙個函式:
cpp**
virtual
void customnativeinitilize() {}
如果當前例項化的ui不是widget藍圖,而是乙個c++ class,在觸發initialize()之後,還會繼續觸發customnativeinitilize(),否則只觸發initialize(),參見userwidget.cpp:
cpp**
bool uuserwidget::initialize()
else
java中靜態初始化塊,例項初始化塊,建構函式區別
public class people public people string name param args public static void main string args 執行效果 new兩個例項,從執行結果可以看出,靜態變數和靜態初始化塊都是在類載入到系統時,載入到系統中,靜態初始化...
構造器初始化
構造器初始化 1.初始化順序 即使變數定義分散於方法定義之間,它仍會在任何方法 包括構造器 被呼叫之前得到初始化。變數定義的先後順序決定了初始化的順序 例 package clear class window class house window w2 new window 2 void f win...
建構函式初始化(預設構造)
當且僅當沒有定義任何建構函式時,編譯器才會提供預設建構函式。為類定義了建構函式後,程式設計師就必須為他提供預設建構函式。我們怎麼理解這句話呢?首先,什麼是預設建構函式?預設建構函式時在未提供顯示初始化時,用來建立物件的建構函式。也就是說,它是用於下面這種宣告的建構函式 expa expa 然後我們看...