第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

如何在pyqt中處理默認(rèn)參數(shù)?

如何在pyqt中處理默認(rèn)參數(shù)?

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

3 回答

?
慕的地8271018

TA貢獻(xiàn)1796條經(jīng)驗(yàn) 獲得超4個(gè)贊

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

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

這兩個(gè)示例均導(dǎo)致無效的索引實(shí)例。

什么是無效的QModelIndex?

可以使用QModelIndex構(gòu)造函數(shù)構(gòu)造無效的模型索引。當(dāng)引用模型中的頂級(jí)項(xiàng)目時(shí),無效索引通常用作父索引。

不insertRows每次被調(diào)用時(shí),需要一個(gè)新的無效實(shí)例?

對(duì)于insertRows函數(shù),該函數(shù)的基類實(shí)現(xiàn)不執(zhí)行任何操作,并返回false。

引用意味著如果您使用它,則QAbstractItemModel需要實(shí)現(xiàn)insertRows自己。這意味著您需要調(diào)用帶父參數(shù)的beginInsertRows。

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

QAbstractItemModel不應(yīng)刪除它自身未創(chuàng)建的任何索引。在C ++中,parent參數(shù)作為const引用傳遞,因此不會(huì)被beginInsertRows函數(shù)刪除或更改。

我認(rèn)為,如果C ++實(shí)例在仍被Python引用時(shí)被刪除,則可能會(huì)發(fā)生分段錯(cuò)誤,這是您最大的問題。

現(xiàn)在在Python中,在函數(shù)定義中創(chuàng)建的參數(shù)通常具有較長的壽命,并且可能有一些我不知道的刪除實(shí)例的方法,但是通常您應(yīng)該是安全的。

如果您對(duì)此感到擔(dān)心,則只需每次都創(chuàng)建一個(gè)新實(shí)例。

index =索引或QtCore.QModelIndex()

但是出于我的價(jià)值,我不記得在函數(shù)定義中創(chuàng)建索引實(shí)例有麻煩,而且我已經(jīng)在很多場合這樣做了。


查看完整回答
反對(duì) 回復(fù) 2021-03-30
?
弒天下

TA貢獻(xiàn)1818條經(jīng)驗(yàn) 獲得超8個(gè)贊

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

  1. 要求是insertRows“如果未指定parent,則每次調(diào)用時(shí)都要實(shí)例化一個(gè)新的QModelIndex”。

  2. Python僅為關(guān)鍵字參數(shù)分配一個(gè)默認(rèn)值-不會(huì)在每次調(diào)用時(shí)分配默認(rèn)值。

所以這是我的解決方案:

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

    index = index or QtCore.QModelIndex()

    # do other stuff


查看完整回答
反對(duì) 回復(fù) 2021-03-30
?
慕哥9229398

TA貢獻(xiàn)1877條經(jīng)驗(yàn) 獲得超6個(gè)贊

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


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

  self.beginInsertRows(index, row, count)

  """ Your stuff here




  """

  self.endInsertRows()

還請查看pyside docs,因?yàn)樗鼈兺ǔ1萷yqt更好,并且在LGPL之下,因此您可以將其用于商務(wù)。IIRC的結(jié)果相同,但是在不同的許可證下實(shí)現(xiàn)不同。




查看完整回答
反對(duì) 回復(fù) 2021-03-30
  • 3 回答
  • 0 關(guān)注
  • 246 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)