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. Why custom widget can't be added to Qt Designer's plugin
Forum Updated to NodeBB v4.3 + New Features

Why custom widget can't be added to Qt Designer's plugin

Scheduled Pinned Locked Moved General and Desktop
5 Posts 2 Posters 1.8k 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.
  • N Offline
    N Offline
    nimingzhe2008
    wrote on last edited by
    #1

    The book Foundations of Qt Development said after building the custom widget plugin project,the widget will be added to Qt Designer as plugin.But when I built the book's example project,I can't find widget in Qt Designer and building succeeded. My Qt Creator is 2.4.1

    1 Reply Last reply
    0
    • A Offline
      A Offline
      andre
      wrote on last edited by
      #2

      Your plugin needs to be build with the exact same configuration as your IDE (designer/creator). That means: using the same Qt version, the same compiler and the same compiler settings. Is that the case?

      You can see the overview of plugins from Creator. Open a designer window, and go to the Tools Menu -> Form Editor -> About Qt Designer plugins...

      You will get a tree with the plugins found, and also see what problems there are with the ones that can't be loaded.

      1 Reply Last reply
      0
      • N Offline
        N Offline
        nimingzhe2008
        wrote on last edited by
        #3

        I did as what you said,and I can't find my plugin in Plugin Information dialog.Here is the book's example code
        plugin.pro

        @TEMPLATE = lib
        CONFIG += designer plugin release

        DEPENDPATH += .

        TARGET = circlebarplugin

        HEADERS += circlebar.h circlebarplugin.h
        SOURCES += circlebar.cpp circlebarplugin.cpp

        DESTDIR = $$[QT_INSTALL_DATA]/plugins/designer

        FORMS +=
        @

        circlebar.h
        @

        #ifndef CIRCLEBAR_H
        #define CIRCLEBAR_H

        #include <QWidget>
        #include <QtDesigner>

        class QDESIGNER_WIDGET_EXPORT CircleBar : public QWidget
        {
        Q_OBJECT

        public:
        CircleBar( QWidget *parent = 0 );
        CircleBar( int value = 0, QWidget *parent = 0 );

        int value() const;

        int heightForWidth( int ) const;
        QSize sizeHint() const;
        public slots:
        void setValue( int );

        signals:
        void valueChanged( int );

        protected:
        void paintEvent( QPaintEvent* );
        void wheelEvent( QWheelEvent* );

        private:
        int m_value;
        };

        #endif // CIRCLEBAR_H
        @

        1 Reply Last reply
        0
        • N Offline
          N Offline
          nimingzhe2008
          wrote on last edited by
          #4

          circlebar.cpp
          @#include <QPaintEvent>
          #include <QWheelEvent>

          #include <QPainter>

          #include "circlebar.h"

          CircleBar::CircleBar( QWidget *parent ) : QWidget( parent )
          {
          m_value = 0;

          QSizePolicy policy( QSizePolicy::Preferred, QSizePolicy::Preferred );
          policy.setHeightForWidth( true );
          setSizePolicy( policy );
          }

          CircleBar::CircleBar( int value, QWidget *parent ) : QWidget( parent )
          {
          m_value = value;

          QSizePolicy policy( QSizePolicy::Preferred, QSizePolicy::Preferred );
          policy.setHeightForWidth( true );
          setSizePolicy( policy );
          }

          int CircleBar::heightForWidth( int width ) const
          {
          return width;
          }

          QSize CircleBar::sizeHint() const
          {
          return QSize( 100, 100 );
          }

          int CircleBar::value() const
          {
          return m_value;
          }

          void CircleBar::setValue( int value )
          {
          if( value < 0 )
          value = 0;

          if( value > 100 )
          value = 100;

          if( m_value == value )
          return;

          m_value = value;

          update();

          emit valueChanged( m_value );
          }

          void CircleBar::paintEvent( QPaintEvent *event )
          {
          int radius = width()/2;
          double factor = m_value/100.0;

          QPainter p( this );
          p.setPen( Qt::black );
          p.drawEllipse( 0, 0, width()-1, width()-1 );
          p.setBrush( Qt::black );
          p.drawEllipse( int(radius*(1.0-factor)), int(radius*(1.0-factor)), int((width()-1)*factor)+1, int((width()-1)*factor)+1 );
          }

          void CircleBar::wheelEvent( QWheelEvent *event )
          {
          event->accept();
          setValue( value() + event->delta()/20 );
          }@

          1 Reply Last reply
          0
          • N Offline
            N Offline
            nimingzhe2008
            wrote on last edited by
            #5

            circlebarplugin.h
            @#ifndef CIRCLEBARPLUGIN_H
            #define CIRCLEBARPLUGIN_H

            #include <QDesignerCustomWidgetInterface>

            class QExtensionManager;

            class CircleBarPlugin : public QObject, public QDesignerCustomWidgetInterface
            {
            Q_OBJECT
            Q_INTERFACES(QDesignerCustomWidgetInterface)

            public:
            CircleBarPlugin( QObject *parent = 0 );

            bool isContainer() const;
            bool isInitialized() const;
            QIcon icon() const;
            QString codeTemplate() const;
            QString domXml() const;
            QString group() const;
            QString includeFile&#40;&#41; const;
            QString name() const;
            QString toolTip() const;
            QString whatsThis() const;
            QWidget *createWidget( QWidget *parent );
            void initialize( QDesignerFormEditorInterface *core );
            

            private:
            bool m_initialized;
            };

            #endif /* CIRCLEBARPLUGIN_H */@

            circlebarplugin.cpp
            @#include <QtPlugin>
            #include <QExtensionManager>
            #include <QDesignerFormEditorInterface>
            #include <QTimer>

            #include "circlebar.h"
            #include "circlebarplugin.h"

            CircleBarPlugin::CircleBarPlugin( QObject *parent )
            {
            m_initialized = false;
            }

            bool CircleBarPlugin::isInitialized() const
            {
            return m_initialized;
            }

            void CircleBarPlugin::initialize( QDesignerFormEditorInterface *core )
            {
            if( m_initialized )
            return;

            m_initialized = true;
            

            }

            bool CircleBarPlugin::isContainer() const
            {
            return false;
            }

            QIcon CircleBarPlugin::icon() const
            {
            return QIcon();
            }

            QString CircleBarPlugin::toolTip() const
            {
            return "";
            }

            QString CircleBarPlugin::whatsThis() const
            {
            return "";
            }

            QString CircleBarPlugin::codeTemplate() const
            {
            return "";
            }

            QString CircleBarPlugin::includeFile() const
            {
            return "circlebar.h";
            }

            QString CircleBarPlugin::name() const
            {
            return "CircleBar";
            }

            QString CircleBarPlugin::domXml() const
            {
            return "<widget class="CircleBar" name="circleBar">\n"
            "</widget>\n";
            }

            QString CircleBarPlugin::group() const
            {
            return "Book Widgets";
            }

            QWidget *CircleBarPlugin::createWidget( QWidget *parent )
            {
            return new CircleBar( parent );
            }

            Q_EXPORT_PLUGIN2( circleBarPlugin, CircleBarPlugin )@

            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