2013-05-20 5 views
0

파일 관리자를 쓰고 있는데 QListView을 통해 아이콘을 표시합니다. Dolphin에서와 같이 QListView 크기에 따라 표 크기를 변경할 수 있기를 원합니다. 돌고래에서 창 크기를 변경하면 격자 크기가 변경됩니다. QListView::size(), QListView::sizeHint(), QListView::minimumSizeHint()을 얻으려고했지만 무엇을하지 않고 매번 QSize(256, 192)과 같은 고정 값을 얻습니다.QListView 너비

그래서 QListView의 너비를 얻는 적절한 방법이 있습니까?

편집 : 나는 내 질문을 편집하고 싶습니다 : QListView의 너비를 멤버 함수 내부에서 가져 오는 방법이 있습니까? 나는 크기를 얻으려고했다.

MyListView LV = new MyListView() 
    qDebug() << LV.size(); 

그것은 정확한 크기를 준다. 하지만 그렇지 않습니다 :

이렇게 올바르게 작동하려면 어떻게해야합니까?

답변

0

QListView의 showEvent (QShowEvent * event) 또는 paintEvent (QPaintEvent * event)를 다시 구현하고 이러한 함수에서 위젯 크기를 가져 오려고 했습니까?

다른 방법이 있습니다. 1. 이벤트 필터를

class Event_Filter : public QObject 
{ 
    Q_OBJECT 
public: 
    explicit Event_Filter(QObject *parent = 0); 

signals: 
    void table_resize();// 
protected: 
    virtual bool eventFilter(QObject *, QEvent *);// 
public slots: 

}; 

bool Event_Filter::eventFilter(QObject *pObject, QEvent *pEvent) 
{ 
    if (!pObject) 
     return false; 
    if(pEvent -> type() == QEvent::Resize) 
    { 
     emit table_resize(); 
     return true; 
    } 
    return false; 
} 
  1. MainWindow를 코드

    table_filter = new Event_Filter();  
    connect(table_filter,SIGNAL(table_resize()),this,SLOT(slot_table_resize())); 
    installEventFilter(table_filter); 
    
  2. 슬롯 코드

    void MainWindow::slot_table_resize() 
    
    { 
    
    //resizing table headers 
    
        if ((items_table_w != ui -> itemsTable -> viewport() -> width()) || (ui -> itemsTable -> columnWidth(DEVTABLE_COLUMN_DEVICE) <= 0)) 
        ...... 
    
    } 
    

나를 위해이 작품의 벌금을 만듭니다.

+0

예. 그것은 효과가있다. 이벤트 필터가 없어도 마찬가지입니다. 'QListView'의 멤버 함수와'QQbstractItemView'의 다른 하위 클래스에서'size()'를 호출 할 때 문제가 발생한다는 것을 알았습니다. – Marcus