要使某個類的功能成爲一個插槽,該類必須從QObject繼承。但是,QObject佔用了相當大的內存。我不確定它是多少,以及內存是爲每個類還是每個對象。我的代碼有許多小數據,其功能可能是某個時隙的插槽。我想知道是否有一種方法可以在課堂上使用它時暫時使課堂功能成爲一個插槽。使用它之後,插槽成本的內存將被刪除。以下代碼說明了這一要求。如何使函數在Qt中暫時成爲一個槽?
class SmallData // size of 2 or 3 integers.
{
public:
virtual void F(); // use it as a slot.
virtual QMenu* createMenu(); // use this to create the context menu with
// an action connected to F()
...
};
// use the small data
vector<SmallData> vec(1000000); // the vector is put at a tree view. When an
// item in the tree view is selected, a context
// menu pop up with an action to run F().
SmallData* data = treeView.selectedItem();
connect(action, SIGNAL(triggered()), data, SLOT(F())); // How to make F() to be
// a slot just here.
// The action is from
// data->createMenu().
是什麼讓你認爲QObject佔用了相當大的內存? – aschepler
我檢查過,但不是很仔細。它有一個父指針和其他數據來實現它的機制。 – user1899020
這是不可能的。此外,有一百萬個項目,使用基於項目的模型而不是定製的QAbstractItemModel將成爲您的瓶頸,而不僅僅是QObjects。添加一個插槽,查找選定的SmallData對象,在其上調用F()。 –