0

我正在编写一个文件管理器,并通过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();
        ...
        ...
        ...
    }

那么我应该重新实现一些东西来让它正常工作吗?

4

1 回答 1

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. 主窗口代码

    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))
      ......
    
    }
    

这对我来说很好。

于 2013-05-20T09:03:19.903 回答