Customizing Qt Dock - c++

What I'm looking to do is use the Qt Dock and the Dock widgets as they are, except I would like the show only the widget as opposed to the whole Dock.
to clarify: when a docked widget is brought into view, the whole dock appears and the widget sits on the dock. I would like to hide the portion of the dock which isn't being occupied by the widget, is there any way to do that?
Please let me know if I can clarify further.

I don't think it is feasible with Dock widgets. There are 4 fixed dock areas on a QMainWindow which are shown if a dock widget is dropped onto them.
What you might try is to disable actual docking with void setAllowedAreas(Qt::NoDockWidgetArea) and handle "snapping" yourself with void QWidget::moveEvent ( QMoveEvent * event ), snapping the widget to the main window edges if it comes within x pixels of it.

Hummm this seems difficult...
For a start, use QDockWidget::setTitleBarWidget ( QWidget * widget ) to set a custom title bar. You can create a special widget which has a small minimum size, minimum size hint, and which is not painted (or painted as invisible)...

Related

Is there a way to attach or anchor two QWidgets together?

I'm getting started with Qt and decided to build a full-screen text editor. I want to have a button (button with arrow in screenshot) attached to a QDockWidget which opens and closes it so the button is always visible to the right side of the screen and stay anchored to it when dock is visible or resized.
My current app is a simple fullscreen textEdit set to centeralwidget in Mainwindow.
I haven't found a way to do this yet with layouts or existing addAnchor() functions so any help or direction is appreciated.
You can achieve what you want by using a container for your text edit and the button. A QWidget instance can be used as an "invisible"*** container for other widgets.
So in Qt Designer you add a widget as a central widget of the main-window, inside this widget you add the text edit and the button, then you set a vertical layout for this container widget.
Don't forget to restrict the docking widget to only dock to the right side, you can do that with: dock->setAllowedAreas(Qt::DockWidgetArea::RightDockWidgetArea); //assuming dock is the pointer to your QDockWidget.
In case you want the dockWidget to be able to dock to any side and the button to follow, you can do that too, but it get a little bit more complicated. Basically you need to connect a slot to dockLocationChanged of your dockWidget and based on where it's docked you need to set-up a new layout for the container widget to be vertical or horizontal and the order of the textEdit and the button based on the side the dock happened.
LE:*** you will most likely need to set the margins you want, since both the widget and it's layout can have them and the actual content might have higher spacing than you want.

Forcing a QDockWidget to behave like a central widget when it comes to resizing

I am using dock widgets without a central widget (setCentralWidget(Q_NULLPTR)) for QOwnNotes (C++, Qt5), because you can have more complex layouts without a central widget.
My problem is that if the user resizes the application main window some more or less random dock widgets will be resized. It would be more desirable to set one specific dock widget to be resized (like the center widget would behave).
Example of the current behavior:
The left area gets resized, it would be much better if the right area (note preview in this case) would get resized.
Is there a way to force a QDockWidget to behave like a central widget when it comes to resizing the main window without actually using a central widget?
I already tried to use sizePolicy.setHorizontalPolicy, but it didn't get me there...

Qt dock neighbour widget behaviour

I have two Qt widgets in the window. One of them is QDockWidget, and another one is just QWidget.
When I drag the QDockWidget, the default behaviour of the another widget is moving without changing its size. And I want it to fill the whole window except dock widget, and to change its size programmatically when I drag QDockWidget. Hwo to do it better?
The solution was to set container horizontal policy as "fixed"

How can I insert QDockWidget as tab

I have a lot of widgets in my application and I know I can drag them during runtime and place over another widget in order to merge them (both widgets are on same place and there are tabs under them which I can use to switch them).
How can I insert QDockWidget like this programmatically from start?
For example I want to add 2 QDockWidgets to bottom that are tabbed so that they are in same area and I can tab-switch them
If you want to layout two or more dock widgets as tabbed windows, you can either drag one dock widget over the other (as you properly described), or do that programaticaly using QMainWindow::tabifyDockWidget(QDockWidget *first, QDockWidget *second) function. As the function description says:
Moves second dock widget on top of first dock widget, creating a
tabbed docked area in the main window.

Adding scroll bar to widget containing a layout in QT C++

I am new to QT and I am creating a widget that has a gridlayout. The gridlayout contains a matrix of QLineEdit widgets. The window resizes to fit the layout but when layout is large it goes off screen. When I maximize the screen, the QLineEdit widgets are resized to fit the screen and for large layouts they become extremely small.
I want to be able to resize the window without resizing the QLineEdit widgets and add scroll bars to navigate.
I tried the following with no luck:
Window->resize(QSize(500,500));
QScrollArea *scrollArea = new QScrollArea;
scrollArea->setWidget(Window);
where window is the widget containing the layout. Also, the window closes when after executing "scrollArea->setWidget(Window);" and I dont why.
If someone can help me out I would really appreciate it.
Thank You!
For disabling the vertical resize on the widgets, why don't you just use the setFixedHeight() method on the widgets?
For the menu bar, why don't you take it out of the widget that is scrollable. You can have a layout for the window that contains the menu bar and then the widget that contains everything else (scrollable part). Is that what you are looking for?
I fixed my problem by creating a QMainWindow with the menu bar. Then created a widget which includes the layout, set the Scroll Area to the widget. Finally set the central widget of the main widow to the scroll area.