QTableview not fitting the entire dockwidget window
-
Hi,
Did you call QDockWidget::setWidget ?
-
@mrjj
Ya I have already used this code.QVBoxLayout *layout = new QVBoxLayout; layout->addWidget(ui->tableView); layout->addWidget(ui->addButton); layout->addWidget(ui->deleteButton); QWidget *widget = new QWidget; widget->setLayout(layout); setCentralWidget(widget);
But I am getting the following error.
error: 'setCentralWidget' was not declared in this scope
setCentralWidget(widget);
^ -
@mrjj :
I already tried dis code but of no use. It is giving the same output.
QVBoxLayout *layout = new QVBoxLayout; layout->addWidget(ui->tableView); layout->addWidget(ui->addButton); layout->addWidget(ui->deleteButton); // QWidget *widget = new QWidget; QDockWidget *DockWidget = new QDockWidget; DockWidget->setLayout(layout); DockWidget->setWidget (DockWidget);
-
Don't set the layout on DockWidget.
By the way, there's something fishy in your code. Did you create your widget with designer and now trying to use it with a QMainWindow ?
Because it looks like you are trying to create the dock widget from within your custom widget and not from a QMainWindow derived class.
-
First I have created the dock in the mainwindow and I am creating the table on the dock through a table class. This layout function is in the class.
Suggest me the right way of getting this done.
MainWindow Code:// Dock Creation this->setCorner(Qt::TopLeftCorner, Qt::LeftDockWidgetArea); this->setCorner(Qt::TopRightCorner, Qt::RightDockWidgetArea); this->setCorner(Qt::BottomLeftCorner, Qt::LeftDockWidgetArea); this->setCorner(Qt::BottomRightCorner, Qt::RightDockWidgetArea); // table creation QDockWidget *dock = new QDockWidget("Way Point Table",this); wayPointTable *wptable = new wayPointTable(); dock->setWidget(wptable); dock->setFixedSize(500, 300); this->addDockWidget(Qt::BottomDockWidgetArea, dock);
WayPointTable class has this code:
ui->tableView->verticalHeader()->setDefaultAlignment(Qt::AlignVCenter | Qt::AlignRight); ui->tableView->horizontalHeader()->setStretchLastSection(true); ui->tableView->resizeColumnsToContents(); QVBoxLayout *layout = new QVBoxLayout; layout->addWidget(ui->tableView); layout->addWidget(ui->addButton); layout->addWidget(ui->deleteButton); // QWidget *widget = new QWidget; QDockWidget *DockWidget = new QDockWidget; DockWidget->setLayout(layout); DockWidget->setWidget (DockWidget); // setCentralWidget(widget);
-
There's no need for any dock widget related code in WayPointTable. Also
DockWidget->setWidget (DockWidget);
doesn't really make sense.One thing to clean, since you used designer for that widget, why are you setting a layout in code ? You should put it directly in through designer.
-
Did you set the form layout properly on the widget in designer ?
-
By the way, why a form layout ?
You should either have everything in a QVBoxLayout or if you want the buttons to be side by side, put them in a QHBoxLayout within the main QVBoxLayout.
-
So a table view on top of an add button on top of a delete button ? That's what QVBoxLayout is for.
-
If you get what's on image1 it means that you didn't apply the QVBoxLayout properly. With it these buttons can't be side by side unless:
- They are in a QHBoxLayout
- Not in a layout at all but you put them side by side on the widget in designer.
-
hi
Here is a sample that uses a UI and scale with the dock
https://www.dropbox.com/s/6ipc9ap6hjvcpr9/ilovemydocks.zip?dl=0
Maybe it can provide some hint.
Note the UI is widget based for this to work. -
@mrjj
I have changed the list widget to tablewidget and added the header columns.
You can observe that the table fits the entire dock. I have done same thing in my other code also but the table does not fit the entire dock (i have used tableview but i guess it should not matter).
Note: the dock code is same.https://www.dropbox.com/s/c04cuu1yoykbtc6/ilovemydocks.zip?dl=0
-
hi
A note
if u set setFixedSize, it wont be resizeable ?Well the layout are in the UI file. Inserted as the first thing.
It sounds to me that your OTHER code is not using the layout
correctly?The scaling is done via layout and layout is the first thing to insert into
the UI. then the rest of the controls. Matters not which Widgets. All can
be managed by a layout.