I followed @Micha's instruction and successfully used the modules in GRASS.

I use **r.watershed** to get the basin raster and the drainage line：
![enter image description here](https://i.stack.imgur.com/MW08w.png)

and I use **r.water.outlet** to get the watershed of one outlet：
![enter image description here](https://i.stack.imgur.com/xrPUK.png)

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
![enter image description here](https://i.stack.imgur.com/iNeUa.png)

This schematic photo shows the idea of what I want：
![enter image description here](https://i.stack.imgur.com/pJhzs.png)

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？

---

I want to find the watershed area, but using QGIS.

I have following files to work with：

1. stream network shapefile(polyline)
2. point shapefile clipped from the polyline shapefile
3. 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：

![enter image description here](https://i.stack.imgur.com/tNL6u.png)

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？