2014-06-13 33 views
1

我有一个方法,获取指向小部件的地方应该设置一些其他小部件。我必须调整主窗口的大小,然后我应该获得该窗口小部件的实际大小。Qt - 如何获得我指向的最大化窗口的实际大小?

我试图做到这一点,如:

void MyClass::setWidgets(QList<QWidget*> list, QWidget *parentWidget) 
{ 
    QWidget* mainWindow = parentWidget->window(); 
    mainWindow->showMaximized(); 

    int width = parentWidget->size().width(); 
    int height = parentWidget->size().height(); 
    /*... rest of method...*/ 
} 

这种方法是从其他类调用。 但我读到我应该等待resizeEvent。任何人都可以解释我应该怎么做,或者如果有任何选择来获得不同的大小?

回答

0

如果您想要获取不同对象的事件,可以使用QObject::installEventFilter安装事件过滤器。

ResizeEvent一个简单的例子是:

filter.hpp

#ifndef FILTER_HPP 
#define FILTER_HPP 

#include <QtGui> 

class ResizeFilter : public QObject 
{ 
    Q_OBJECT 
    public: 
    ResizeFilter(); 
    protected: 
    bool eventFilter(QObject *obj, QEvent *event); 
}; 

#endif 

filter.cpp

#include "filter.hpp" 

ResizeFilter::ResizeFilter() : QObject() {} 

bool ResizeFilter::eventFilter(QObject *obj, QEvent *event) 
{ 
    if (event->type() == QEvent::Resize) 
    { 
    QResizeEvent* resizeEv = static_cast<QResizeEvent*>(event); 
    qDebug() << resizeEv->size(); 
    } 
    return QObject::eventFilter(obj, event); 
} 

的main.cpp

#include <QtGui> 
#include "filter.hpp" 

int main(int argc, char** argv) 
{ 
    QApplication app(argc, argv); 

    ResizeFilter filter; 

    QWidget window; 
    window.installEventFilter(&filter); 
    window.showMaximized(); 

    return app.exec(); 
} 

filter.pro

TEMPLATE = app 
HEADERS = filter.hpp 
SOURCES = main.cpp filter.cpp 

当测试这个我的电脑上它给输出:

QSize(840, 420) 
QSize(1280, 952) 
+0

谢谢,它的工作原理:d –

相关问题