2017-09-05 14 views
-3

Qt Designerでドラッグ&ドロップ要素として解釈されるカスタムウィジェット/プラグインを作成しようとしています。しかし、ほとんどの作品は、ビルドの最後に1つのエラーが発生します。 Cannot convert argument 1 from 'QWidget *' to 'const GLineEdit &'私はこれを修正するために何をしたいのか分からないが、それほど確かではない。ここに私の関連するソースコードは次のとおりです。Qtカスタムウィジェットビルドできません

GlineEditPlugin.cppスニペット

QWidget *GLineEditPlugin::createWidget(QWidget *parent) 
{ 
    return new GLineEdit(parent); 
} 

GLineEdit.cpp

#include "glineedit.h" 
GLineEdit::GLineEdit(const QString &str, const QString &color, QWidget *parent) 
    : QWidget(parent) 
{ 
    QVBoxLayout *layoutMain = new QVBoxLayout(this); 

    setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed); 

    m_header = new GLineEditHeader(this, str); 
    m_header->setStyleSheet("QLabel { color: " + color + "; }"); 
    m_input = new GLineEditInput(this); 
    m_input->setStyleSheet(QString("QLineEdit { font-size: 12pt; padding-bottom: 5px; border: none; background-color: transparent; border-bottom: 2px solid %1; color: %1;}").arg(color)); 

    layoutMain->addSpacerItem(new QSpacerItem(20, 15, QSizePolicy::Minimum, QSizePolicy::Fixed)); 
    layoutMain->addWidget(m_input); 
    layoutMain->setContentsMargins(0, 0, 0, 0); 
    layoutMain->setSpacing(0); 

    connect(m_input, &GLineEditInput::focusChanged, m_header, &GLineEditHeader::zoom); 
    connect(m_input, &GLineEditInput::cleared, m_header, &GLineEditHeader::enableZoom); 
} 

GLineEdit.h

#ifndef GLINEEDIT_H 
#define GLINEEDIT_H 

#include "glineeditheader.h" 
#include "glineeditinput.h" 

#include <QWidget> 
#include <QVBoxLayout> 

class GLineEdit : public QWidget 
{ 
    Q_OBJECT 

public: 
    GLineEdit(const QString &str, const QString &color, QWidget *parent = 0); 

    QString text() const; 
    QString title() const; 

    void setText(const QString &str); 
    void setTitle(const QString &str); 

private: 
    GLineEditHeader *m_header; 
    GLineEditInput *m_input; 
}; 

#endif //GLINEEDIT_H 
+1

どのラインがエラーに関連していますか?私は表示されたコードのどこにでも 'const GLineEdit&'型の変数が必要なことはありません。 –

+0

あなたのコードは**完全**ではなく、どちらも** minimal **ではありません。より簡単な例(プラグインの登録が含まれていて、それが何であれ、 'GLineEditInput'は必要ありません)を作成することができます。コードを問題の[mcve]にするようにコードを編集してください。そうすれば、それを再現して解決することができます。 [ask]も読んでください。 –

答えて

2

これはMinimal, Complete, and Verifiable exampleではない、とあなた失敗している行を指すために行方不明です。しかし、おそらくあなたの問題はここで見つけることができ

return new GLineEdit(parent); 

あなたのクラスGLineEditはタイプQWidget*の単一の引数、複数の引数を受け入れるだけをとるコンストラクタを提供していません。だから、コンパイラは

GLineEdit::GLineEdit(const GLineEdit&) 

可能な解決策のように見える自動的に作成されたコピーコンストラクタ、に頼るしようとします:

  1. があなたのコンストラクタ呼び出しに不足しているパラメータを追加します。
  2. 親ウィジェットへのポインタをパラメータとして受け入れるコンストラクタを提供します。
関連する問題