Я сделал, пока так (в тестовом проекте) в окне располагаются, вверху тулбар внизу виджет с кнопками
fs - Переход в full screen. ns - normal screen.
label - картинка(эмуляция моего тяжелого виджета)
verticalLayout - главный компоновщик
cpp
MW::MW() {
    setupUi(this);
    connect(actionFs, SIGNAL(triggered()), this, SLOT(fs()));
    connect(actionNs, SIGNAL(triggered()), this, SLOT(ns()));
}
void MW::fs()
{
    verticalLayout->removeWidget(label);
    label->move(10,10);    label->resize(size()-QSize(20,20));    label->show();
    verticalLayout->addItem(si = new QSpacerItem(400,200,QSizePolicy::Maximum, QSizePolicy::Maximum));
//    showFullScreen();
}
void MW::ns()
{
    verticalLayout->removeItem(si);
    delete si;
    verticalLayout->insertWidget(0,label);
//    showNormal();
}h
class MW:public QMainWindow, public Ui::mainForm
{
    Q_OBJECT
    QSpacerItem *si;
public:
    MW();
private slots:
    void fs();
    void ns();
};
уже лучше и виджет не ресайзится при появлении тулбара(если его вытаскивать и затаскивать в форму), но тем не менее картинка сдвигается вниз когда я его располагаю вверху.
Может тулбар можно в отдельный виджет засунуть? нужно чтобы в полном экране его видно не было, а когда он появлялся то просто перекрывал все что внизу.