QListView宽度

时间:2013-05-20 07:30:56

标签: qt4 qlistview

我正在编写文件管理器,并通过QListView显示图标。我希望能够根据QListView大小更改网格大小,就像在Dolphin中一样。 (在海豚中改变窗口大小,改变网格大小)。我已尝试获取QListView::size()QListView::sizeHint()QListView::minimumSizeHint()以及其他内容,但我每次都会获得QSize( 256, 192 )等固定值。

那么有没有一种获得QListView宽度的正确方法?

编辑:我想将我的问题编辑为:有没有办法从其成员函数中获取QListView的宽度?我确实尝试将大小设为

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

这给出了确切的大小。但这不是:

    void MyListView::someMemberFunction() {
        ...
        ...
        qDebug() << size();
        ...
        ...
        ...
    }

我应该重新实现一些东西以使其正常工作吗?

1 个答案:

答案 0 :(得分:0)

您是否尝试重新实现QListView的showEvent(QShowEvent * event)或paintEvent(QPaintEvent * event)并从这些函数中获取widget的大小?

这是另一种方式。 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. 主窗口代码

    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))
      ......
    
    }
    
  3. 这对我来说很好。