2012-12-18 69 views
3

這是我的第一個問題,所以忍受着我!Qt:讓所有的孩子在父母的地區

目前在我的程序中,我有一個父窗口小部件作爲畫布。用戶可以在運行時向小組添加或刪除小部件。然後給這些小部件一個絕對的位置,也就是說,它們沒有被佈局定位。一旦添加,用戶可以任意移動小部件。

我希望用戶能夠通過拖動框圍繞它們來選擇一組窗口小部件。我已經編寫了用戶拖動時顯示矩形的部分。現在,我希望能夠檢索矩形(區域)內的所有小部件。

我知道findChild()和findChildren()函數,他們確實按照它們應該返回的那些孩子。但我真正需要的是一種限制搜索到區域邊界的方法,因爲最有可能是「畫布」內的很多小部件。 (由於我在做的事情的性質,可能有成千上萬的小部件分佈在很大的區域!)

這是我的問題:什麼是我最好的選擇?我應該繼續並使用findChildren()並遍歷列表以手動查找區域內的子項。或者我應該使用findChild(x,y)遍歷區域內的所有像素?或者也許有更簡單的解決方案可以加快這個過程? findChildren(x,y,width,height)的幾行符?

希望我的問題有道理。我試圖儘可能好地解釋事情。謝謝!

+0

這是你的父母部件?請發佈您的實際代碼的可管理版本 – 2012-12-18 01:32:32

+0

這只是我製作的一個自定義小部件,它擴展了QWidget並實現了自己的繪圖。它捕捉一些鼠標事件來做一些奇特的事情。沒什麼太複雜的。當我啓動一個孩子時,我給父母作爲參數,然後我用絕對座標指定他們的位置。我會盡力將我的代碼的可管理版本放在一起,並在完成後更新我的帖子。 – Apos

+0

數以千計的小工具?這是...很多!從你所描述的內容來看,[Graphics View Framework](http://doc.qt.digia.com/qt/graphicsview.html)聽起來更合適。 – Avaris

回答

3

如果您已經使用QGraphicsScene而不是自己滾動,則可以使用items(..)方法在特定區域非常有效地找到您的孩子。

它只能在QGraphicsScene中使用,因爲它使用BSP空間加速結構,所以如果在合理的時間內無法遷移到QGraphicsScene - 您將自行編寫代碼。它沒有聽起來那麼難,我寫了許多結構體層結構,它們非常簡單。

+0

哇!看起來這正是我正在尋找的東西!我會試一試,然後我會將你的回答標記爲已解決。謝謝! – Apos