Qt - 如何获得指针指向的最大化窗口的实际大小?

时间:2014-06-13 10:28:48

标签: qt window-resize

我有一个方法可以获取指向widget的指针,其中应该设置一些其他小部件。我必须调整主窗口的大小,放置该窗口小部件,然后我应该获得该窗口小部件的实际大小。

我试过这样做:

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。任何人都可以解释我应该如何做到这一点,或者是否有任何选择以不同的方式获得这个大小?

1 个答案:

答案 0 :(得分: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)