Qt doubleClicked 事件发出两次

Posted

技术标签:

【中文标题】Qt doubleClicked 事件发出两次【英文标题】:Qt doubleClicked event emitted twice 【发布时间】:2018-07-04 09:25:45 【问题描述】:

我有一个 QTableView 和一个只有一列的 QAbstractview。我将双击事件分配给 QTableView,它调用一个打印所选值的函数。奇怪的是,当表中只有一条记录时,它可以正常工作。当有更多记录时,该函数总是被调用两次。

这是我的代码:

class ViewWindow(QWidget):

def __init__(self):
    super(ViewWindow, self).__init__()
    loader = QUiLoader()
    file = QFile(abspath("ui/view.ui"))
    file.open(QFile.ReadOnly)
    self.view_screen = loader.load(file, self)
    file.close()
    self.initUI()

def initUI(self):

    self.model = QStandardItemModel(parent=self)
    self.model.setColumnCount(1)
    self.model.setRowCount(len(d))
    for i in range(0, len(d)):
        self.model.setItem(i, 0, QStandardItem(str(d[i]['file'+str(i+1)])))

    self.view_screen.tbl_attachments.setModel(self.model)

    self.view_screen.tbl_attachments.setAlternatingRowColors(True)
    self.view_screen.tbl_attachments.verticalHeader().setVisible(False)
    self.view_screen.tbl_attachments.horizontalHeader().setVisible(False)
    self.view_screen.tbl_attachments.setSelectionMode(QAbstractItemView.SingleSelection)
    self.view_screen.tbl_attachments.setEditTriggers(QAbstractItemView.NoEditTriggers)
    self.view_screen.tbl_attachments.setShowGrid(False)
    self.view_screen.tbl_attachments.setFocusPolicy(Qt.NoFocus)
    self.view_screen.tbl_attachments.setColumnWidth(0, 680)
    self.view_screen.tbl_attachments.doubleClicked.connect(self.open_attachment)


def open_attachment(self):
        print (self.view_screen.tbl_attachments.currentIndex().data())

有人知道这个问题吗?

非常感谢和最好的问候

编辑:

我想通了:当我手动添加元素时,它会起作用。从json添加它似乎是问题所在。我就是这样做的:

    urllib.urlcleanup()
    f = urllib.urlopen("https://kose.kutschera.co.at/view_attachments_client.php?aussendung_id=22")
    s = f.read()
    f.close()
    d = json.loads(s)

    self.model = QStandardItemModel(parent=self)
    self.model.setColumnCount(1)
    self.model.setRowCount(len(d))
    for i in range(0, len(d)):
        attach = str(d[i]['file'+str(i+1)])
        self.model.setItem(i, 0, QStandardItem(attach))

有什么想法吗? - 谢谢

【问题讨论】:

请编辑您的问题以提供minimal reproducible example。 QTableView 没有信号itemDoubleClicked,只有doubleClicked,我用过你的代码,运行正常,请提供minimal reproducible example,显示view.ui 内容 itemDoubleClicked 还是doubleClicked? 我已经尝试了它的最新更新,它可以正常工作。你能回答吗? 它是双击的。抱歉发错了,我已经编辑了。 【参考方案1】:

我发现了问题。我在我多次调用的函数中连接了打印函数。所以它被连接了好几次......

感谢你们的帮助。

【讨论】:

以上是关于Qt doubleClicked 事件发出两次的主要内容,如果未能解决你的问题,请参考以下文章

QT开发(六十三)——QT事件机制分析

QT事件循环

Qt消息机制和事件

Qt消息机制和事件

是否可以在 Qt3.0 中发出跨进程信号或发布触摸/鼠标单击事件?

如何在 .NET 单选按钮中获取 DoubleClick 事件?