Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. Qt Development
  3. General and Desktop
  4. [Resolved] How to add a onRezise to QWidget Inherit Class?
Forum Updated to NodeBB v4.3 + New Features

[Resolved] How to add a onRezise to QWidget Inherit Class?

Scheduled Pinned Locked Moved General and Desktop
12 Posts 4 Posters 5.6k Views 1 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • D Offline
    D Offline
    dcbasso
    wrote on last edited by
    #1

    I'm creating my own QWidget.
    Inside this widget I have the QWebView, and when the parent QWidget on the QWebView resizes, I want to handle with the event "onResize", on any other similar event.
    It's possible to make that?!

    1 Reply Last reply
    0
    • K Offline
      K Offline
      KA51O
      wrote on last edited by
      #2

      I'm not sure if I understand you correctly, but I think you want to "install a custom EventFilter":http://qt-project.org/doc/qt-4.8/qobject.html#eventFilter.

      1 Reply Last reply
      0
      • A Offline
        A Offline
        AcerExtensa
        wrote on last edited by
        #3

        Maybe the "void resizeEvent(QResizeEvent *)":http://qt-project.org/doc/qt-4.8/qwidget.html#resizeEvent is what are you looking for?

        God is Real unless explicitly declared as Integer.

        1 Reply Last reply
        0
        • B Offline
          B Offline
          broadpeak
          wrote on last edited by
          #4

          two code snippet:

          @
          void YourWidget::resizeEvent(QResizeEvent * /* event */)
          {
          yourWebView->setGeometry(9, 9, 50, 25);
          }
          @

          @

          bool YourWidget::eventFilter(QObject *target, QEvent *event)
          {
          if (QResizeEvent resizeEvent = static_cast<QResizeEvent>(event))
          somesize.setWidth(width);
          else
          return QWidget::eventFilter(target, event); // this line is important!
          }
          @

          1 Reply Last reply
          0
          • D Offline
            D Offline
            dcbasso
            wrote on last edited by
            #5

            Thank you all.
            The eventFilter Solve my problem.

            1 Reply Last reply
            0
            • A Offline
              A Offline
              AcerExtensa
              wrote on last edited by
              #6

              Please add prefix "[SOLVED]" left to the topic subject. Thanks!

              God is Real unless explicitly declared as Integer.

              1 Reply Last reply
              0
              • D Offline
                D Offline
                dcbasso
                wrote on last edited by
                #7

                Well.. At the first look works... but know I got error!
                I use this code:
                @
                installEventFilter(this);
                @
                but now is not working... When I use this code the Widget is not showing, any error appears to me, just the widget is not showed!!!! If removed the Widget is showed normally!

                The code:

                @
                #include "widgetsvg.h"
                #include "ui_widgetsvg.h"

                #include <QWebFrame>
                #include "QtCore/QDebug"

                WidgetSVG::WidgetSVG(QWidget *parent) :
                QWidget(parent),
                ui(new Ui::WidgetSVG)
                {
                ui->setupUi(this);
                }
                WidgetSVG::WidgetSVG(Veiculo *newVeiculo, QWidget *parent):
                QWidget(parent),
                ui(new Ui::WidgetSVG)
                {
                ui->setupUi(this);
                setVeiculo( newVeiculo );
                installEventFilter(this);
                }
                WidgetSVG::~WidgetSVG()
                {
                delete ui;
                }
                void WidgetSVG::setVeiculo(Veiculo newVeiculo)
                {
                this->veiculo = newVeiculo;
                ui->webView->setUrl( getVeiculo()->getFileUrl() );
                ui->webView->page()->mainFrame()->addToJavaScriptWindowObject("sender", this);
                }
                Veiculo
                WidgetSVG::getVeiculo()
                {
                return this->veiculo;
                }
                void WidgetSVG::adjust()
                {
                qDebug() << "teste...";
                // QString url = ui->webView->url().toString().remove(0, 7);
                // renderer = new QSvgRenderer(url);
                // ui->webView->setZoomFactor( getFactor() );
                // qDebug() << "Factor: " << getFactor();
                // qDebug() << "Ratio: " << getSVGRatio();
                // double teste = (double) ui->webView->size().height() / ui->webView->size().width();
                // qDebug() << "Now Ratio: " << teste;
                }
                void WidgetSVG::clicked(QString message)
                {
                qDebug() << "CLICKED --> " << message;
                }
                bool WidgetSVG::eventFilter(QObject *obj, QEvent *event)
                {
                qDebug() << "inside event filter...";
                if (event->type() == QEvent::Resize)
                {
                adjust();
                }
                return true;
                }
                int WidgetSVG::getComponentWidth()
                {
                return ui->webView->size().width();
                }
                int WidgetSVG::getSVGWidth()
                {
                return renderer->defaultSize().width();
                }
                double WidgetSVG::getSVGRatio()
                {
                return (double) renderer->defaultSize().height() / renderer->defaultSize().width();
                }
                double WidgetSVG::getFactor()
                {
                return (double) getComponentWidth() / getSVGWidth();
                }
                @

                How to fix it?!

                1 Reply Last reply
                0
                • B Offline
                  B Offline
                  broadpeak
                  wrote on last edited by
                  #8

                  As I wrote earlier:
                  @return QWidget::eventFilter(target, event); // this line is important!@
                  (this is important, 'cause if have any other event, later won't be handled)

                  Forget the return "true".
                  Hope this helps...

                  1 Reply Last reply
                  0
                  • D Offline
                    D Offline
                    dcbasso
                    wrote on last edited by
                    #9

                    [quote author="broadpeak" date="1346160246"]two code snippet:
                    @
                    void YourWidget::resizeEvent(QResizeEvent * /* event */)
                    {
                    yourWebView->setGeometry(9, 9, 50, 25);
                    }
                    @
                    [/quote]

                    I'm trying this, and I got this error:

                    @../SistemaAssistenciaTecnica/widgetsvg.cpp:75:43: error: no 'void WidgetSVG::resizeEvent(QResizeEvent*)' member function declared in class 'WidgetSVG'
                    make: *** [widgetsvg.o] Error 1@

                    The code:

                    @
                    void WidgetSVG::resizeEvent(QResizeEvent *)
                    {
                    adjust();
                    }
                    @

                    1 Reply Last reply
                    0
                    • D Offline
                      D Offline
                      dcbasso
                      wrote on last edited by
                      #10

                      [quote author="broadpeak" date="1346248753"]As I wrote earlier:
                      @return QWidget::eventFilter(target, event); // this line is important!@
                      (this is important, 'cause if have any other event, later won't be handled)

                      Forget the return "true".
                      Hope this helps...[/quote]

                      .h
                      @
                      public slots:
                      bool eventFilter(QObject *obj, QEvent *event);
                      @

                      .cpp
                      @
                      bool WidgetSVG::eventFilter(QObject *obj, QEvent *event)
                      {
                      qDebug() << "inside event filter...";
                      if (event->type() == QEvent::Resize)
                      {
                      adjust();
                      }
                      return QWidget::eventFilter(target, event);
                      }
                      @

                      Error:

                      @
                      ../SistemaAssistenciaTecnica/widgetsvg.cpp: In member function 'virtual bool WidgetSVG::eventFilter(QObject*, QEvent*)':
                      ../SistemaAssistenciaTecnica/widgetsvg.cpp:73:33: error: 'target' was not declared in this scope
                      ../SistemaAssistenciaTecnica/widgetsvg.cpp: At global scope:
                      ../SistemaAssistenciaTecnica/widgetsvg.cpp:66:6: warning: unused parameter 'obj'
                      ../SistemaAssistenciaTecnica/widgetsvg.cpp: In member function 'virtual bool WidgetSVG::eventFilter(QObject*, QEvent*)':
                      ../SistemaAssistenciaTecnica/widgetsvg.cpp:74:1: warning: control reaches end of non-void function
                      @

                      1 Reply Last reply
                      0
                      • D Offline
                        D Offline
                        dcbasso
                        wrote on last edited by
                        #11

                        Sorry:

                        @
                        bool WidgetSVG::eventFilter(QObject *obj, QEvent *event)
                        {
                        qDebug() << "inside event filter...";
                        if (event->type() == QEvent::Resize)
                        {
                        adjust();
                        }
                        return QWidget::eventFilter(obj, event);
                        }
                        @

                        1 Reply Last reply
                        0
                        • B Offline
                          B Offline
                          broadpeak
                          wrote on last edited by
                          #12

                          @
                          bool WidgetSVG::eventFilter(QObject *obj, QEvent *event)
                          {
                          qDebug() << "inside event filter...";
                          if (event->type() == QEvent::Resize)
                          {
                          adjust();
                          return true; // if you have handled the event (what you have filtered), HERE return "true"
                          }
                          // if you have NOT handled the event (other events), return with this:
                          return QWidget::eventFilter(obj, event);
                          }
                          @

                          1 Reply Last reply
                          0

                          • Login

                          • Login or register to search.
                          • First post
                            Last post
                          0
                          • Categories
                          • Recent
                          • Tags
                          • Popular
                          • Users
                          • Groups
                          • Search
                          • Get Qt Extensions
                          • Unsolved