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
Qt 6.11 is out! See what's new in the release blog

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

Scheduled Pinned Locked Moved General and Desktop
5 Posts 2 Posters 1.9k 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