2016-10-20 2 views
1

У меня есть следующие макеты:кварты набор виджетов в QGridLayout с таким же размером

enter image description here

когда я растянуть окно, размер становится так:

enter image description here

Есть ли способ установить виджеты в qgridlayout с тем же размером при изменении размера qgridlayout?

Спасибо.

ОБНОВЛЕНИЕ

виджет в QGridLayout:

#ifndef CVIMAGEWIDGET_H 
#define CVIMAGEWIDGET_H 

#include <QWidget> 
#include <QImage> 
#include <QPainter> 
#include <QGraphicsView> 
#include <QGraphicsScene> 
#include <QMainWindow> 

class CVImageWidget : public QGraphicsView 
{ 
    Q_OBJECT 

public: 
    explicit CVImageWidget(QMainWindow *GUIWindow, QWidget *parent = 0); 
    void drawBoarder(bool flag); 
    void showImage(const QImage& image); 

    void SetCameraID(int camID); 
    int GetCameraID(); 
    void closeDisplay(); 
    ~CVImageWidget(); 

private: 
    QGraphicsScene *scene_; 
    int camera_id_; 

public slots: 

    void resizeEvent(QResizeEvent *event); 

}; 



#endif // CVIMAGEWIDGET_H 

СРР файла

#include "cvimagewidget.h" 
#include <QMouseEvent> 
#include <iostream> 

CVImageWidget::CVImageWidget(QMainWindow *GUIWindow, QWidget *parent) : QGraphicsView(parent) 
{ 
    scene_ = new QGraphicsScene(parent); 
    scene_->setSceneRect(this->sceneRect()); 
    this->setScene(scene_); 
    this->installEventFilter(GUIWindow); 
    this->setStyleSheet("CVImageWidget { border-color: rgb(125,125,116); border-width: 3px; border-style: solid;}"); 
// this->setMinimumSize(136, 114); 
    camera_id_ = -1; 
} 


void CVImageWidget::showImage(const QImage& image) { 
    if(!image.isNull()){ 
     scene_->clear(); 
     scene_->addPixmap(QPixmap::fromImage(image)); 
    } 
} 

void CVImageWidget::closeDisplay() 
{ 
    scene_->clear(); 
} 

void CVImageWidget::SetCameraID(int camID) 
{ 
    camera_id_ = camID; 
} 

int CVImageWidget::GetCameraID() 
{ 
    return camera_id_; 
} 

void CVImageWidget::resizeEvent(QResizeEvent *event) 
{ 
    this->fitInView(this->sceneRect(), Qt::IgnoreAspectRatio); 
    QGraphicsView::resizeEvent(event); 
} 

void CVImageWidget::drawBoarder(bool flag) 
{ 
    if(flag) 
    { 
     this->setStyleSheet("CVImageWidget { border-color: rgb(0,255,0); border-width: 3px; border-style: solid;}"); 
    }else 
    { 
     this->setStyleSheet("CVImageWidget { border-color: rgb(125,125,116); border-width: 3px; border-style: solid;}"); 
    } 
} 


CVImageWidget::~CVImageWidget() 
{ 
    delete scene_; 
} 
+0

Вы читали это? Вы можете найти несколько указателей о том, как контролировать изменение размера. http://doc.qt.io/qt-5/layout.html – Hayt

+0

Размер макета зависит от используемого виджета, поэтому если виджет внутри макета сетки имеет одинаковый размер. Они расширяются одинаково. Можете ли вы показать код? – sanjay

+0

@sanjay Я обновил код. Вы можете помочь – Johnnylin

ответ

2

Когда вы добавляете элементы в макет, убедитесь, что вы добавили коэффициент растяжения для всех строк и столбцов.

int main(int argc, char *argv[]) 
    { 
     QApplication a(argc, argv); 

     QWidget widget; 
     QGridLayout layout; 
     for(int i =0 ; i < 4; i++) 
     { 
      layout.setRowStretch(i, 1); 
      for (int j = 0; j < 4; j++) 
      { 
       if(i == 0) 
       { 
        layout.setColumnStretch(j, 1); 
       } 
       CVImageWidget * temp = new CVImageWidget(&widget); 
       layout.addWidget(temp, i, j, 1, 1); 
       if(i ==0 && j== 0) 
       { 
        temp->showImage(QImage("/Users/sacp/Desktop/check.png")); 
       } 
      } 
     } 
     widget.setLayout(&layout); 
     widget.show(); 
     a.exec(); 
     return 0; 
    } 

Вот как это выглядит после того, как изменить размер enter image description here

+0

В моем классе QMainWindow у меня есть eventFilter, который позволяет пользователю дважды щелкнуть выбранный CVImageWidget. Двойной щелчок CVImageWidget будет расширяться до полного размера QGridLayout. Другие CVImageWidgets будут скрыты? Есть ли способ сделать это ? Если я установлю столбец и строку растянуть, как я могу достичь эффекта расширения? благодаря – Johnnylin

0

Установка колонны растяжимость и строки тянутся к 1 для каждой строки/столбца

+0

Как вы можете видеть на первом снимке экрана, все виджеты используют тот же размер. Это происходит только при изменении размера. Итак, это виджет внутри, который создает эту проблему. – sanjay

+0

Это не работает ... – Johnnylin

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