Is it possible (without writing Python code - sorry I'm not a developer) to create a point layer from a polygon layer but ensure the point is within the polygon? The ftools centroid tool is cool but some centroids are created outside the polygon (i.e. irregular polygon). In ArcGIS there is a "Feature to Point" tool similar to the ftools 'polygon centroids' tool but has a checkbox to force the point to be within the polygon.
If you do not care about whether the point is a centroid or not, just use Vector -> ResearchTools -> Random Points. You may define to place a single point per each polygon in a layer. Also you may create centroids for initial polygons, delete points that do not intersect any polygon, save polygons without points as a separate layer, create random points for this polygosns and in the end copy these random points to centroids layer.
EDIT : answer by @Kampau Ocu : "point on surface is already within QGIS3 Processing Toolbox"
You can also use the plugin RealCentroid that does just what you're looking for :
RealCentroids plugin creates a point shape file with internal points of a polygon shape, similar to PostGIS (GEOS) ST_PointOnSurface. The point will be inside the polygon in all cases. Not only the points are created but the attributes are also copied from the polygon to the internal points . A single point is generated for multipart geometry too.