Qt多个视图和具有所选行的相同模型

时间:2018-04-09 05:46:41

标签: qt pyqt model-view

我已经和Qt一起工作了大约一年,而且我仍然在努力使用自定义模型/视图。尤其是树状结构。

我有一个名为Account的类,它代表像帐户对象这样的网站:

class Account:
    def __init__(website, name, cookies):
        self.website = website   # string
        self.account = account   # string

        # list of lists:  
        # [ ['CookieName1', 'CookieValue1', 'Domain1', 'Path1', 'Expiration1'],
        #   ['CookieName2', 'CookieValue2', 'Domain2', 'Path2', 'Expiration2'] ]
        self.cookies = cookies

实际上,cookie实际上是一个自定义的QNetworkCookieJar子类,但出于测试目的,它就是这种形式。

我希望模型将帐户存储在列表中,从该列表中我将能够将我想要的数据公开给视图

我想以下面的形式将这些Account对象公开给多个视图,其中我有两个视图。左边的那个只显示2列中的网站和帐户名称。右侧的视图显示左侧视图中SELECTED帐户的cookie(5列)

Model/View Multiple Views based on selection

我正在努力找出建模的最佳方式,但我认为我需要做的是如下所示总共有7列(在本例中我有两个帐户,第一个有3个cookies,第二只有一个cookie):

  [Website]   [Account]   [CName]   [CValue]     [CDomain]  [CPath]    [CExpires]
- Website1    Account1    (empty)   (empty)      (empty)    (empty)    (empty)
  (empty)     (empty)     CName1    CVal1        Dom1       Path1      Exp1
  (empty)     (empty)     CName2    CVal2        Dom2       Path2      Exp2
  (empty)     (empty)     CName3    CVal3        Dom3       Path3      Exp3
- Website2    Account2    (empty)   (empty)      (empty)    (empty)    (empty)
  (empty)     (empty)     CName1    CVal1        Dom1       Path1      Exp1

我会隐藏左视图中的最后5列,并隐藏右视图中的前2列和右视图上的每个selectionChanged()信号调用setRootIndex(),以选择显示cookie的正确索引。

rowCount()实现看起来像这样:

def rowCount(self, parentIdx):
        # If no parent index I assume top-level row, so just return the total amount of Accounts we have
        if not parentIdx.isValid():
            return len(self.accounts)

        # Otherwise get the Account object and return how many cookies we have
        account = parentIdx.internalPointer()
        return len(account.cookies)

但是我完全失去了如何实现index()和parent()。树形建模结构令我感到困惑,因为我实际上并没有在任何视图中显示树形结构。有没有更好的方法来做这个?也许代理模型?

理解正确方向的任何帮助/指导,

由于

0 个答案:

没有答案