2009-08-03 61 views
1

我正在做一些重構。我正在實施模型 - 視圖 - 控制器模式。該視圖是一個Qt小部件。使用QAbstractTableModel子類的Qt小部件的MVC

最初,Qt小部件在堆上創建了一個QAbstractTableModel子類的新實例。讓我們稱之爲FooTableModel。

e.g

Widget::Widget(QWidget* parent) 
    : 
    QWidget(parent) 
    m_model(new FooTableModel(this)) 
{ 

我應該在MVC模式,而不是創建FooTableModel的新實例?

通過這樣做,我可以創建視圖的依賴(假設我還是widget的指針傳遞給FooTableModel構造函數)

或者,我可以在任何傳遞給FooTableModel構造並手動刪除FooTableModel我MVC模型。 *

最後一個選項是將FooTableModel的創建保留在小部件中。 (並讓小部件直接處理FooTableModel?)

任何建議或偏好?

我的猜測是現在就去*。

回答

2

一般而言,您希望避免將視圖傳遞給模型。

如果你的MVC模型是一個QObject,並且FooTableModel實例是它的一個孩子,那麼你不需要擔心清理,因爲Qt會爲你做。理想情況下,如果你使用的是Qt,FooTableModel將會是模型,或者它的實例。

Qt遵循模型/視圖模式,因爲控制器工作由視圖處理。退房:http://doc.trolltech.com/4.5/model-view-introduction.html瞭解更多信息。

簡答:不傳遞給FooTableModel,完成後刪除它。

+0

感謝您的建議。 :)我的MVC模型不是QObject,所以我會在其析構函數中進行清理。我的MVC模型正在處理整個小部件的數據,其中FooTableModel被用於在小部件上繪製的QTableView。我現在可能會堅持下去。 「如果你使用的是Qt,FooTableModel就是模型」。你的意思是我應該使用Qt模型作爲整個小部件的模型? (而不是滾動我自己)我不知道我會如何做到這一點。我通常將Qt模型與其相關的視圖聯繫起來。 – 2009-08-04 07:39:27