QT自定义小部件无法构建

Qt Custom Widget Failing to Build

本文关键字:构建 自定义 小部 QT      更新时间:2023-10-16

我正在尝试制作一个自定义的小部件/插件,以由QT Designer解释为拖放元素。但是,大多数作品在构建结束时确实会遇到一个错误。Cannot convert argument 1 from 'QWidget *' to 'const GLineEdit &'我不太确定这要我要解决什么,但是不太确定。这是我的相关源代码:

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

这不是一个最小,完整且可验证的示例,您缺少指向失败的线

但是,很可能您的问题可以在这里找到:

return new GLineEdit(parent);

您的类GLineEdit不提供一个构造函数,该构造函数对QWidget*类型的单个参数,只有一个接受多个参数。因此,编译器试图诉诸于自动创建的复制构造器,看起来像

GLineEdit::GLineEdit(const GLineEdit&)

可能的解决方案:

  1. 将丢失的参数添加到您的构造函数调用中。
  2. 提供一个构造函数,该构造函数接受指向父窗口小部件的指针仅为参数。