2017-09-05 86 views
-3

我正在嘗試將一個自定義小部件/插件作爲拖放元素由Qt Designer解釋。大多數作品,但我在構建結束時得到一個錯誤。 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

你的代碼不是**完整**,也不是最小**。你應該能夠創建一個更簡單的例子(包括插件註冊,不需要'GLineEditInput',不管是什麼)。請[編輯]你的代碼,這是你的問題[mcve],然後我們可以嘗試重現並解決它。你還應該閱讀[問]。 –

回答

2

這不是一個Minimal, Complete, and Verifiable example,和你我們錯過了指出失敗的路線。

然而,最有可能您的問題可以在這裏找到:

return new GLineEdit(parent); 

GLineEdit類不提供一個構造函數QWidget*類型的一個參數,只有一個接受多個參數。因此編譯器試圖求助於自動生成的拷貝構造函數,它看起來像

GLineEdit::GLineEdit(const GLineEdit&) 

可能的解決方案:

  1. 缺少的參數添加到您的構造函數調用。
  2. 提供一個構造函數,該構造函數只接受父窗口小部件的指針作爲參數。