QTableview not fitting the entire dockwidget window



  • This code generates a tableview for a docked window as shown in image 1 but I want a tableview as shown in image 2. (second image tableview was generated on mainwindow using setCentralWidget(widget); ). When I try to use the same code , i get the error 'setCentralwidget' not declared in this scope as it is not mainwindow. How to get the similar view for a docked window?

     ui->deleteButton->setEnabled(false);
        ui->tableView->setModel(model);
        ui->tableView->setItemDelegate(new ItemDelegate(this));
        ui->tableView->verticalHeader()->setDefaultAlignment(Qt::AlignVCenter | Qt::AlignRight);
        ui->tableView->horizontalHeader()->setStretchLastSection(true);
        ui->tableView->resizeColumnsToContents();
    
    
        ui->tableView->verticalHeader()->setSectionsMovable(true);
    
        ui->addButton->setFocus();
    
    

    image1
    image2


  • Qt Champions 2017

    @saitej said:
    hi for a docked window, you would add a
    layout to it first and then insert the controls
    in that layout. then it will fit all area of window.

    http://doc.qt.io/qt-5/layout.html


  • Lifetime Qt Champion

    Hi,

    Did you call QDockWidget::setWidget ?



  • @SGaist :
    Ya I have called that code ...



  • @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);
    ^


  • Qt Champions 2017

    @saitej said:

    setCentralWidget

    This is only valid with a QMainwindow. :)

    You would do
    (the code u shown)
    and then
    DockWidget->setWidget (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);
    

  • Lifetime Qt Champion

    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.



  • @SGaist

    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);
    
       
    

  • Lifetime Qt Champion

    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.



  • @SGaist
    How to set the tableview to occupy the entire dock window through the designer ? I have put the tableview and the 2 buttons in a formlayout.


  • Lifetime Qt Champion

    Did you set the form layout properly on the widget in designer ?



  • @SGaist Ya


  • Lifetime Qt Champion

    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.



  • @SGaist
    These layouts are not giving the required display. I have played with the different layouts. After putting the layout code along with the setcentralwidget, then it had worked when I had used on the mainwindow.


  • Lifetime Qt Champion

    So a table view on top of an add button on top of a delete button ? That's what QVBoxLayout is for.



  • @SGaist I want the display as in image 2. The table occupies the entire window. I am getting as shown in Image 1


  • Lifetime Qt Champion

    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:

    1. They are in a QHBoxLayout
    2. Not in a layout at all but you put them side by side on the widget in designer.


  • @SGaist
    The buttons are not the problem I want the tableview to occupy the entire dock but it is coming in a fixed size how much ever i increase the dock size.
    Image


  • Qt Champions 2017

    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


  • Qt Champions 2017

    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.



  • @mrjj
    I dont want the dock to be resizeable but the tableview to fit the dock entirely. I have commented out all the layout code and put vertical layout in the designer. Still, I get the same problem.


  • Qt Champions 2017

    @saitej
    well if the layout is applied correctly, you can see at once in Designer that
    it works so there must be something wrong.

    To put the vertical layout, you
    right click and go to the layout menu ?



  • @mrjj

    I am attaching the images of the layout and the output.

    layout UI
    output


  • Qt Champions 2017

    @saitej said:
    super
    I can see the error.
    You have dragged a layout from left side.
    Those are for floating layouts or layout in layout.

    To apply layout, simply right click the form,
    and use the Layout menu. That will scale.
    Do not drag from the left. Right click. :)

    You dont have to remove the red layout. Simply right click outside and apply
    layout via the layout menu to the form object.

    http://doc.qt.io/qt-5/designer-layouts.html



  • @mrjj
    Thanks a lot!!

    I should have sent the UI image earlier. Sorry for the inconvenience.


  • Qt Champions 2017

    @saitej
    Np. The drag able layout are a bit non intuitive :)
    Note:
    If you have a completely new form with no widgets, you must
    place 1 widget on form for the right click menu to be active . that
    fooled me a lot in the beginning. :)


Log in to reply
 

Looks like your connection to Qt Forum was lost, please wait while we try to reconnect.