我使用的是pyqt5和pyside2,而不是c++ qt。
我试过这个:
series = QLineSeries()
series.append(QPointF(x, y))
series.clicked.connect(lambda p: print(p in series.point()))实际上,每次我单击这个点时,返回的点并不是串联的(False),而是根据qt5文档
当用户通过单击图表中的点触发鼠标事件时发出此信号。
据我所知,图表中的点也应该在系列中。
那么,我怎样才能通过点击得到一个连续点呢?
发布于 2020-04-02 16:27:51
解释:
为了理解QLineSeries单击信号的功能,我将使用以下示例:我将使用点(0,0),(1,1),(2,0),(3,1)和(4,0)来构造这个系列。
如果您查看信号,它将在连接构建序列的点的线路按下(例如(2.5,0.5))时发出,因此按下的点与points() (或pointsVector())返回的不一致。
解决方案:
如果只希望在按下用于构建序列的点时检测,则可以计算距离以检查其是否小于阈值,然后返回该点:
import sys
from PySide2 import QtCore, QtGui, QtWidgets
from PySide2.QtCharts import QtCharts
def verify(series, p, threshold=0.05):
distances = [
(QtGui.QVector2D(p - x).length(), x)
for x in series.pointsVector()
if QtGui.QVector2D(p - x).length() < threshold
]
if distances:
p = min(distances)
return p[1]
def main():
app = QtWidgets.QApplication(sys.argv)
series = QtCharts.QLineSeries()
series << QtCore.QPointF(0, 0) << QtCore.QPointF(1, 1) << QtCore.QPointF(
2, 0
) << QtCore.QPointF(3, 1) << QtCore.QPointF(4, 0)
series.setPointsVisible()
chart = QtCharts.QChart()
chart.addSeries(series)
chart.createDefaultAxes()
chartView = QtCharts.QChartView(chart)
chartView.show()
chartView.resize(640, 480)
def on_clicked(p):
x = verify(series, p)
if x is not None:
print("clicked: ", x)
series.clicked.connect(on_clicked)
sys.exit(app.exec_())
if __name__ == "__main__":
main()https://stackoverflow.com/questions/60990641
复制相似问题