0

私はファイルマネージャーを書いていて、アイコンをQListView. QListViewDolphinのように、サイズに応じてグリッドサイズを変更できるようにしたいです。(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 に答える