亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何在pyqt中處理默認參數?

如何在pyqt中處理默認參數?

UYOU 2021-03-05 11:08:05
在Qt中,您在QAbstractItemModel中具有此例程(以及其他例程)bool insertRows(int row, int count, const QModelIndex &parent = QModelIndex());如果未指定parent,則每次調用它時都會實例化一個新的QModelIndex。在python中,同一行的含義有很大不同:每次調用僅實例化和共享一個QModelIndex我不清楚的一點是PyQt如何處理這種差異。該文檔似乎是從C ++自動生成的,其結果是默認參數實例化使用相同的語法,但含義完全不同,從而使問題沒有得到解決。這個問題當然會在QAbstractItemModel的PyQt中進行自定義重新實現。你應該宣布 def insertRows(self, row, count, index=QtCore.QModelIndex()):或者 def insertRows(self, row, count, index=None):如果索引為None,則實例化一個新的QModelIndex?
查看完整描述

3 回答

?
慕的地8271018

TA貢獻1796條經驗 獲得超4個贊

bool insertRows(int row, int count, 
                const QModelIndex &parent = QModelIndex());

def insertRows(self, row, count, index=QtCore.QModelIndex()):

這兩個示例均導致無效的索引實例。

什么是無效的QModelIndex?

可以使用QModelIndex構造函數構造無效的模型索引。當引用模型中的頂級項目時,無效索引通常用作父索引。

不insertRows每次被調用時,需要一個新的無效實例?

對于insertRows函數,該函數的基類實現不執行任何操作,并返回false。

引用意味著如果您使用它,則QAbstractItemModel需要實現insertRows自己。這意味著您需要調用帶父參數的beginInsertRows。

當涉及到父索引時,Qt的C ++端將不在乎給定哪個實例。只要它是無效的,就意味著當前項目在模型的頂層,并且沒有父項。

QAbstractItemModel不應刪除它自身未創建的任何索引。在C ++中,parent參數作為const引用傳遞,因此不會被beginInsertRows函數刪除或更改。

我認為,如果C ++實例在仍被Python引用時被刪除,則可能會發生分段錯誤,這是您最大的問題。

現在在Python中,在函數定義中創建的參數通常具有較長的壽命,并且可能有一些我不知道的刪除實例的方法,但是通常您應該是安全的。

如果您對此感到擔心,則只需每次都創建一個新實例。

index =索引或QtCore.QModelIndex()

但是出于我的價值,我不記得在函數定義中創建索引實例有麻煩,而且我已經在很多場合這樣做了。


查看完整回答
反對 回復 2021-03-30
?
弒天下

TA貢獻1818條經驗 獲得超8個贊

首先,按我的方式做的原因:

  1. 要求是insertRows“如果未指定parent,則每次調用時都要實例化一個新的QModelIndex”。

  2. Python僅為關鍵字參數分配一個默認值-不會在每次調用時分配默認值。

所以這是我的解決方案:

def insertRows(self, row, count, index=None):

    index = index or QtCore.QModelIndex()

    # do other stuff


查看完整回答
反對 回復 2021-03-30
?
慕哥9229398

TA貢獻1877條經驗 獲得超6個贊

這是我在程序中添加開始和結束的方式:


def insertRows(self, row, count, index): 

  self.beginInsertRows(index, row, count)

  """ Your stuff here




  """

  self.endInsertRows()

還請查看pyside docs,因為它們通常比pyqt更好,并且在LGPL之下,因此您可以將其用于商務。IIRC的結果相同,但是在不同的許可證下實現不同。




查看完整回答
反對 回復 2021-03-30
  • 3 回答
  • 0 關注
  • 245 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號