工作日誌:用切換畫面騙騙看

原本高高興興的要釋出了,結果發現Release版會當掉,後來檢查是因為我把指標提早釋放了。 但很奇怪啊,Debug版居然毫無問題…這是什麼巫術? 講到這個就想到為了看是哪個環節有問題,讓程式寫log檔,結果基本上什麼都沒抓到,因為一開始就當了嘛…

這次改版除了之前一直提的核心部份,外部的改良就是在於各位可以用腳本建立各別的畫面。 這個「畫面」是由Qamer::Screen提供,它加了一些特殊的signals/slots好把「我要換畫面」這一類的訊息傳出去。 設定檔是data/script/screen_main.lua,所以請別砍它。

你可以用另外的檔案設計介面,如screen_main.lua內容:

-- 讀取ui設定檔:data/script/screen_mainmenu.lua
mainmenu = require("./data/script/screen_mainmenu");
-- 加入screen,其id為1
window:addScreen(1, mainmenu);

其中id 0是保留給戰鬥畫面,所以不可以使用。 另外,第一個加入的畫面會成為一開始顯示的畫面。

screen_mainmenu.lua

-- 建立Screen
local screen = qt.new_qobject(qt.meta.Screen);

local mainlayout = qt.new_qobject(qt.meta.QVBoxLayout);
qt.ui.layout_add(screen, mainlayout);

local startBtn = qt.new_qobject(qt.meta.QPushButton);
startBtn.text = "&Start";
-- 指定按鈕按下時,要求前往id為0的「畫面」,也就是戰鬥畫面。
-- toScreen是動態屬性,目前只支援使用QPushButton增加動態屬性。
startBtn.toScreen = 0;
qt.connect(startBtn, "clicked()", screen, " 大专栏  工作日誌:用切換畫面騙騙看;when_widgetToScreen_required()");
screen.startBtn = startBtn;
qt.ui.layout_add(mainlayout, startBtn);

local loadBtn = qt.new_qobject(qt.meta.QPushButton);
loadBtn.text = "&Load Game";
loadBtn.enabled = false;
screen.loadBtn = loadBtn;
qt.ui.layout_add(mainlayout, loadBtn);

local exitBtn = qt.new_qobject(qt.meta.QPushButton);
exitBtn.text = "&Exit Game";
exitBtn.enabled = false;
screen.exitBtn = exitBtn;
qt.ui.layout_add(mainlayout, exitBtn);

return screen;

本次下載包含一個叫qtlua_uic的程式,它可以把Qt Designer設計的.ui轉成.lua檔。 不過因為Qamer::Screen是我寫的,所以它不認識,轉換完後你要手動改一下。 啊,是有些不方便,囧,之後可能要研究一下這部份。

之前給QtLua加的「QObject自動轉換」會造成程式當掉,好討厭的感覺。 具體來說就是沒註用過的類別都會嘗試自動轉成QObject,結果不是其子類的類別就會出現問題。 我想了很久,發現沒有額外方法判定是否是QObject,所以還是砍掉了。

致歉:
README中把Alexandre Becoulet的大名打錯了。 但是我不想再花40分鐘重新上傳一次,所以就沒改。

原文地址:https://www.cnblogs.com/lijianming180/p/12247655.html