Update#1： Thanks, Micha, I have followed your instruction and successfully use the modules in GRASS.
I use r.watershed to get the basin raster and the drainage line：
and I use r.water.outlet to get the watershed of one outlet：
I got the whole basin area of the green outlet point, but all I want is the little part of the original basin area, like this：part B is what I want
This schematic photo shows the idea of what I want：
Can I achieve this goal using r.water.outlet or other modules in GRASS？ Or all I can do is using the intersect tool in Geoprocessing tools in QGIS？
As title, I want to find the watershed area, but using QGIS.
I have following files to work with：
- stream network shapefile(polyline)
- point shapefile clipped from the polyline shapefile
- a whole island(the stream is inside the island) DEM(I got 2 types:.lan & .tiff)
I want to find the total watershed area located upstream of every point in the network, here's the schematic diagram：
the green, red, and yellow line enclose the watershed of each point(here I only take 3 points as the example), and I want to calculate their area.
I already got the DEM file, and I must cut the region that contains the stream off, should I polygonize it first？Can I directly use this form(.lan or .tiff) to work with GRASS？