0

如何QTableWidget在每次单击时将附加鼠标单击坐标写入 a?我已经可以QMouseEvent在 a 中显示坐标QLabelItem,但我想添加一行,其中包含每次点击的坐标。这可能吗?我知道我需要使用setItem(),但如何将它附加到现有的鼠标单击事件?

这是我用于鼠标点击的事件过滤器:

   def eventFilter(self, obj, event):
        if obj is self.p1 and event.type() == event.GraphicsSceneMousePress:
            if event.button()==Qt.LeftButton:
                pos=event.scenePos()
                x=((pos.x()*(2.486/96))-1)
                y=(pos.y()*(10.28/512))
                self.label.setText("x=%0.01f,y=%0.01f" %(x,y))
       #here is where I get lost with creating an iterator to append to the table with each click
             for row in range(10):
                for column in range(2):
                    self.coordinates.setItem(row,column,(x,y))
4

2 回答 2

1

假设model=QTableView.model(),您可以在表中附加一个新行,例如:

nbrows = model.rowCount()
model.beginInsertRows(QModelIndex(),nbrows,nbrows)
item = QStandardItem("({0},{1})".format(x,y))
model.insertRow(nbrows, item.index())
model.endInsertRows()

如果您有 aQTableWidget而不是 a QTableView,则可以使用相同的 MO:

  • 追加一个新行self.insertRow(self.rowCount())
  • 使用该.setItem方法修改最后一行的数据。您可以使用 exampleQTableWidgetItem("({0},{1})".format(x,y))或任何您喜欢的字符串来表示您的坐标元组。

但是,我建议您开始使用QTableViews 而不是 a QTableWidget,因为它提供了更大的灵活性。

于 2012-09-02T14:10:57.340 回答
1

假设您有一个包含值的两列表x,y,并且您希望在每次单击时附加一个新行:

def eventFilter(self, obj, event):
    if obj is self.p1 and event.type() == event.GraphicsSceneMousePress:
        if event.button() == Qt.LeftButton:
            pos = event.scenePos()
            x = QtGui.QTableWidgetItem(
                '%0.01f' % ((pos.x() * 2.486 / 96) - 1))
            y = QtGui.QTableWidgetItem(
                '%0.01f' % (pos.y() * 10.28 / 512))
            row = self.coordinates.rowCount()
            self.coordinates.insertRow(row)
            self.coordinates.setItem(row, 0, x)
            self.coordinates.setItem(row, 1, y)
于 2012-09-02T18:25:11.983 回答