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



  • 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



  • 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.



  • 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
    @



  • 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 );
    }@



  • 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 )@


Log in to reply
 

Looks like your connection to Qt Forum was lost, please wait while we try to reconnect.