Qt具有與小部件分開的佈局系統類型,這會導致我出現問題。我知道,當我有一個了QSplitter,我可以做Qt小部件在彼此之上堆疊子佈局
new SomeCustomQWidget(splitter);
但是添加的東西給它,如果我有一個QWidget,我不應該能夠做同樣的事情? Qt網頁僅解釋如何將layoutItems添加到佈局,只通過繼承兩個子類來將它們連接到小部件。所以,正確的無我做這樣的事情
item = new QWidget(parentsplitter); //this works
subitem = new customWidget(item); //this too
subitem2 = new QSlider(item); //this isn't laid out with subitem
然而,這導致滑動器的子項的頂部,而不是被旁邊(右側或低於我期望)。調用
//either
new QVBoxLayout(item);
//or
item->setLayout(new QVBoxLayout());
//or
item->setLayout(new QVBoxLayout(item));
在初始化項目後沒有幫助。 (我的邏輯是該項目將佈局作爲子項目並將添加後續子項)。
我早些時候解決了這個問題,但現在我在QGraphicsView中製作一個小部件時面臨完全相同的問題。我覺得應該不需要爲我想要動態添加到這些小部件的每個項目創建一個自定義子類,就像Qt網站所期望的那樣。 (如果我只是想添加一些文本和幾個按鈕,我真的需要製作2個自定義子類嗎?)我使用.ui文件進行基本佈局,但這些項目需要動態創建。
解決方案
忘了打電話給item->show();
在用於佈局的部件。
原來,我測試過其他正確的代碼,但由於我的一些子類調用了show(),但其他一些子類卻沒有,所以這只是對我而言是打破了。
但這不是graphicswidgets的問題,因爲graphicslayout只能用於添加graphicslayoutite,它不包括例如graphicstextitems。
解決方案2 使用QGraphicsProxyWidget代替QGraphicsWidget固定的問題!