Qt 插槽,调用没有匹配函数

Posted

技术标签:

【中文标题】Qt 插槽,调用没有匹配函数【英文标题】:Qt slot, no matching function for call 【发布时间】:2014-10-30 01:24:01 【问题描述】:

我对 Qt 很陌生。我想创建一个简单的应用程序,其中使用 OpenGL 生成三角形,并通过三个按钮更改该三角形的颜色。

这是我的代码:

在 MainWindow.h 我声明槽:

public slots:
void redButton(Widget w);
void greenButton(Widget w);
void blueButton(Widget w);

它们使用 Widget 类中的函数改变颜色:

void MainWindow::redButton(Widget w)

    w.setColor(red);

在 widget.h 我有:

class Widget : public QGLWidget

    Q_OBJECT

public:
    Widget(QWidget *parent = 0);

    QSize minimumSizeHint() const;
    QSize sizeHint() const;

    enum color
    
        red,
        green,
        blue
    ;

    enum color c;

    void setColor(enum color color1);

protected:
    void initializeGL();
    void paintGL();
    void resizeGL(int width, int height);

;

而函数 setColor 看起来像这样:

void Widget::setColor(enum color color1)

    c = color1;

不幸的是,我收到一条错误消息:

没有匹配的函数调用 'Widget::setColor(QPushButton*&)' w.setColor(red);

//蓝色和绿色也一样 我不知道我做错了什么。

【问题讨论】:

【参考方案1】:

嗯,你的函数声明

 void Widget::setColor(enum color color1);

显然不符合你的要求

 void Widget::setColor(QPushButton*&);

当然,这些QPushButton 实例都没有建立enum color 的有效实例,因此您会遇到那些编译器错误。

【讨论】:

哦,是的!谢谢!我忘记了我将按钮命名为与枚举元素相同的方式。我看到了。但现在我有一个错误sayon​​g '红色没有在这个范围内声明'。我该如何申报? @user30935 在单独的头文件中提供枚举,并在需要时#include 它们。 好的,现在我还有一个错误:E:\Programy\Qt\5.3\mingw482_32\include\QtOpenGL\qgl.h:457: error: 'QGLWidget::QGLWidget(const QGLWidget&)'是私有的 Q_DISABLE_COPY(QGLWidget) ^

以上是关于Qt 插槽,调用没有匹配函数的主要内容,如果未能解决你的问题,请参考以下文章

Qt 将信号与自定义插槽匹配

QT连接没有匹配的函数来调用

Qt invokeMethod 异步调用

Qt - 没有匹配函数调用‘QVariant::QVariant(MyClass&)’

错误:没有匹配函数来调用...返回语句

模板参数推导与 QT lambda 不匹配