2016-03-09 2 views
0

Im, используя setContentsMargins, чтобы добавить расстояние между моими вкладками (центральный виджет) и виджетами док-станции, но также компенсирует строку меню.Qt menubar offset

тест

class MainWindow : public QMainWindow 
{ 
    Q_OBJECT 

public: 
    MainWindow(QWidget *parent = 0) 
    : QMainWindow(parent) 
    { 
     QMenu* fileMenu = menuBar()->addMenu("File"); 
     fileMenu->addMenu("menu item"); 

    QTabWidget* tabs = new QTabWidget(); 
    tabs->addTab(new QWidget(), "something"); 

    setCentralWidget(tabs); 

    QDockWidget* dw = new QDockWidget("docking", this); 
    dw->setAllowedAreas(Qt::LeftDockWidgetArea | Qt::RightDockWidgetArea); 

    dw->setWidget(new QTabWidget(dw)); 
    addDockWidget(Qt::RightDockWidgetArea, dw); 
    setContentsMargins(5, 5, 5, 5); 
    resize(500, 500); 
    } 

    ~MainWindow() {} 
}; 

изображение

enter image description here

+0

Вместо настройки поля содержимого для главного окна попробуйте установить его для центрального виджета. 'this-> centralWidget() -> setContentsMargins (5, 5, 5, 5);' – nnb

+0

Я тоже это пробовал, но я думаю, что setContentsMargins только смещает дочерние виджеты, поэтому он не имел никакого эффекта – DevGuy

+0

Думаю, вам нужно добавить дополнительный макет , где размещается виджет вкладки и виджет док-станции и изменяются поля этого макета. Я попробовал это, и это дает мне тот же результат. – Paraboloid87

ответ

1

Я пробовал так:

MainWindow::MainWindow(QWidget *parent) 
    : QMainWindow(parent) 
{ 
    QMenu* fileMenu = menuBar()->addMenu("File"); 
    fileMenu->addMenu("menu item"); 


    QWidget* widget = new QWidget(this); 
    QHBoxLayout *layout = new QHBoxLayout(widget); 

    QTabWidget* tabs = new QTabWidget(widget); 
    tabs->addTab(new QWidget(), "something"); 


    QDockWidget* dw = new QDockWidget("docking", widget); 
    dw->setAllowedAreas(Qt::LeftDockWidgetArea | Qt::RightDockWidgetArea); 

    dw->setWidget(new QTabWidget(dw)); 
    addDockWidget(Qt::RightDockWidgetArea, dw); 
    resize(500, 500); 

    widget->setLayout(layout); 
    layout->addWidget(tabs); 
    layout->addWidget(dw); 
    layout->setContentsMargins(50, 50, 50, 50); 

    setCentralWidget(widget); 
} 

Он работает на макете. Но при удалении виджета нет области перетаскивания. Вы можете состыковать его, дважды щелкнув строку заголовка. Я не понял, как сохранить область перетаскивания. Мне интересно, если кто-нибудь знает, как это может быть достигнуто.

+0

плохо дает вам точку в Интернете, но я не могу принять его как ответ, потому что некоторые функции док-виджет теряются. – DevGuy

+1

Я подумал, почему он потерян. Я попытался установить его, установив минимальный размер и т. Д., Но не было ничего, что бы делало трюк. Мне любопытно, если у кого есть намек. – Paraboloid87

Смежные вопросы