## linestring layer
lineLayer = iface.addVectorLayer("LineString", "Line Layer", "memory")
linePr = lineLayer.dataProvider()
## polygon layer
rectLayer = iface.addVectorLayer("Polygon", "Rectangle Layer", "memory")
rectPr = rectLayer.dataProvider()
## intersection layer
intLayer = iface.addVectorLayer("LineString", "Intersection Layer", "memory")
intPr = intLayer.dataProvider()
## define linestring
defLine = [QgsPoint(1,1), QgsPoint(2,1), QgsPoint(2,2), QgsPoint(1,2),
QgsPoint(1,3), QgsPoint(2,3), QgsPoint(2,4), QgsPoint(1,4)]
## define polygon
defRect = [[QgsPoint(0.5,0.5),QgsPoint(1.5,0.5),
QgsPoint(1.5,4.5),QgsPoint(0.5,4.5),QgsPoint(0.5,0.5),]]
line = QgsGeometry.fromPolyline(defLine)
rect = QgsGeometry.fromPolygon(defRect)
ft1 = QgsFeature()
ft1.setGeometry(line)
ft2 = QgsFeature()
ft2.setGeometry(rect)
linePr.addFeatures([ft1])
rectPr.addFeatures([ft2])
if line.intersects(rect):
## intersection
int = QgsGeometry(line.intersection(rect))
ft = QgsFeature()
ft.setGeometry(int)
intPr.addFeatures([ft])
intLayer.updateExtents()