Ok everything that is going on here to me seems like bad OOP.  Once there is a parent class for all the plot types then they should have a configure method and this whole section should reduce to something like.

    PlotClass *plot = NULL;
    switch(plotType) {
    case PLOT2D:
        plot = new Plot2d(this);
        qSettings->beginGroup(QString("plot2d"))
        break;
    case PLOT3D:
        plot = new Plot3d(this);
        qSettings->beginGroup(QString("plot3d"))
        break;
    }
    plot->configure(qSettings);
    qSettings->endGroup();

So that basically this general code doesn't have to know any of the details of how the child plot types are configured and set up.  This is the basic principle behind abstraction.  The calling method should just basically know here is how I create a plot (new Plot(this)), and configure one (plot->configure()) and no more details than that.  Then all the details are grouped into the code with the various implementations.

It's also considered quite bad practice to set the member variables of another class the way you are doing (removes the ability to later add various code that you might want without refactoring.  typically you use a setter method).