請看看下面的代碼:
的Qt:創建QStackedLayout
QStackedLayout stackLayout(this);
QStackedLayout stackLayout = QStackedLayout(this);
我有兩個問題:
爲什麼是第二條語句不可能的?
當我在頭文件中聲明變量而不是指針時,如何調用QStackedLayout的構造函數?
請看看下面的代碼:
的Qt:創建QStackedLayout
QStackedLayout stackLayout(this);
QStackedLayout stackLayout = QStackedLayout(this);
我有兩個問題:
爲什麼是第二條語句不可能的?
當我在頭文件中聲明變量而不是指針時,如何調用QStackedLayout的構造函數?
你應該定義stackLayout爲指針
QStackedLayout* stackLayout = new QStackedLayout(this);
的第一個問題很簡單:QStackedayout inherites QObject的。你永遠不能複製或分配QObject。
第二個問題你要做的是調用QStackedLayout的構造函數。但我想你真的想知道,如何在你的.h文件中做到這一點?只有默認的構造函數是可能的。指針在這種情況下很好。或者你把QStackedLayout layout
放在你的.h文件中,並在你的構造函數中添加類似layout.setParent(this)的東西。我從來沒有這樣做過。我看起來很奇怪。所以我不知道是否有任何缺點。
編輯:嗯... 臉紅 ...的 '唯一默認構造函數' 當然是無稽之談。有時候會花費更長的時間思考一兩次。特別是關於構造,這自己很少使用。 :-)
首先,我認爲你錯誤地解釋了構造函數。 Qt可以充分用於其元素父,因爲在堆上創建時將管理他們的存儲時間:
// here you need this constructor, so Qt will free the resource for you
QStackedLayout * layout = new QStackedLayout(this);
// here you don't need it, the object has automatic storage duration
QStackedLayout layout;
然後,如果你想呼籲在你的頭文件中聲明的對象有一定的構造,使用初始化列表:
struct foo
{
foo()
: s("demo")
{}
std::string s;
};
對象從QObject
派生,因而是不可拷貝 - 這就是爲什麼你的第二個語句不起作用。
我真的不明白你的第二個問題。你能否展示一些你想工作但不喜歡的代碼示例?還請說明你所得到的確切的編譯錯誤。 – Mat