我正在编写一个文件管理器,并通过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();
...
...
...
}那么,我应该重新实现一些东西来让它正常工作吗?
发布于 2013-05-20 17:03:20
您是否尝试过重新实现QShowEvent的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;
}table_filter =新的Event_Filter();connect(table_filter,SIGNAL(table_resize()),this,SLOT(slot_table_resize();installEventFilter(table_filter);
void MainWindow::slot_table_resize() {//如果((items_table_w != ui -> itemsTable -> viewport() -> width()) || (ui -> itemsTable -> columnWidth(DEVTABLE_COLUMN_DEVICE) <= 0)) ......}
这对我来说很好。
https://stackoverflow.com/questions/16644642
复制相似问题