Qt4 QListView宽度

Qt4 QListView宽度,qt4,qlistview,Qt4,Qlistview,我正在编写一个文件管理器,并通过QListView显示图标。我希望能够根据QListView大小更改网格大小,就像Dolphin中一样。(在“更改窗口大小”中,更改网格大小)。我尝试过获取QListView::size(),QListView::sizeHint(),QListView::minimumSizeHint()等等,但每次都会得到像QSize(256,192)这样的固定值 那么,有没有合适的方法来获取QListView的宽度呢 编辑:我想将我的问题编辑为:有没有办法从QListVie

我正在编写一个文件管理器,并通过
QListView
显示图标。我希望能够根据
QListView
大小更改网格大小,就像Dolphin中一样。(在“更改窗口大小”中,更改网格大小)。我尝试过获取
QListView::size()
QListView::sizeHint()
QListView::minimumSizeHint()
等等,但每次都会得到像
QSize(256,192)
这样的固定值

那么,有没有合适的方法来获取QListView的宽度呢

编辑:我想将我的问题编辑为:有没有办法从QListView的成员函数内部获取其宽度?我确实试过把尺寸弄得和你一样大

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

qDebug()您是否尝试重新实现QListView的showEvent(QShowEvent*event)或paintEvent(qPaint event*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;
}
  • 主窗口代码

    table_filter = new Event_Filter();      
    connect(table_filter,SIGNAL(table_resize()),this,SLOT(slot_table_resize()));
    installEventFilter(table_filter);
    
  • 时隙代码

    void MainWindow::slot_table_resize()
    
    {
    
    //resizing table headers
    
      if ((items_table_w != ui -> itemsTable -> viewport() -> width()) || (ui -> itemsTable -> columnWidth(DEVTABLE_COLUMN_DEVICE) <= 0))
      ......
    
    }
    
    void主窗口::slot\u table\u resize()
    {
    //调整表标题的大小
    
    如果((items_table_w!=ui->itemsTable->viewport()->width())| |(ui->itemsTable->columnWidth(DEVTABLE_COLUMN_DEVICE)确实可以。它确实可以工作。即使没有事件过滤器,它也可以。我意识到调用
    size()时会出现问题
    QListView
    的成员函数中,可能还有
    QQbstractItemView
    的其他子类。
    void MainWindow::slot_table_resize()
    
    {
    
    //resizing table headers
    
      if ((items_table_w != ui -> itemsTable -> viewport() -> width()) || (ui -> itemsTable -> columnWidth(DEVTABLE_COLUMN_DEVICE) <= 0))
      ......
    
    }