我正在编写文件管理器,并通过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();
...
...
...
}
我应该重新实现一些东西以使其正常工作吗?
答案 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;
}
主窗口代码
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))
......
}
这对我来说很好。