• 5015阅读
  • 4回复

[提问]connect()无法编译通过 [复制链接]

上一主题 下一主题
离线qscbmn
 

只看楼主 正序阅读 楼主  发表于: 2016-07-19
mainWindow.h:
#include <QPainter>#include <QDesktopWidget>#include <QSystemTrayIcon>#include <QIcon>class MainWindow : public QWidget{    Q_OBJECT
public:    explicit MainWindow(QWidget *parent = 0);    ~MainWindow();
protected:    void paintEvent(QPaintEvent *event) Q_DECL_OVERRIDE;};
#endif // MAINWINDOW_Hmainwindow.cpp:#include "mainwindow.h"#include "ui_mainwindow.h"const int SIZE=200;
MainWindow::MainWindow(QWidget *parent) :    QWidget(parent){……    QTimer *timer=new QTimer(this);//    connect(timer,SIGNAL(timeout()),this,SLOT(update()));    connect(timer,&QTimer::timeout,this,&QWidget::update);//    connect(timer,&QTimer::timeout,this,&MainWindow::update);……}使用connect(timer,&QTimer::timeout,this,&QWidget::update);或者connect(timer,&QTimer::timeout,this,&MainWindow::update);编译错误error: no matching function for call to 'MainWindow::connect(QTimer*&, void (QTimer::*)(QTimer::QPrivateSignal), MainWindow*, <unresolved overloaded function type>)'
     connect(timer,&QTimer::timeout,this,&QWidget::update);

请问这是怎么回事?该怎么解决?                                                          ^
                                                        ^
离线qscbmn

只看该作者 4楼 发表于: 2016-07-22
回 dbzhang800 的帖子
dbzhang800:QWidget::update() 有四个重载函数,你必须指明用哪一个。
如果你的Qt低于5.7 ,你需要用类型转换,转成你需要的重载函数的函数指针
如果不低于5.7,你可以用qOverload 或 QOverload 选择合适的重载函数的函数指针 (2016-07-22 11:40) 

原来如此,谢啦
离线dbzhang800

只看该作者 3楼 发表于: 2016-07-22
QWidget::update() 有四个重载函数,你必须指明用哪一个。

如果你的Qt低于5.7 ,你需要用类型转换,转成你需要的重载函数的函数指针

如果不低于5.7,你可以用qOverload 或 QOverload 选择合适的重载函数的函数指针
1条评分金钱+3
qscbmn 金钱 +3 - 2016-07-22
离线never_forget

只看该作者 2楼 发表于: 2016-07-22
试试普通的信号看看,这样{connect(timer,SIGNAL(timeout()),this,SLOT(update()));}应该可以的!
离线qscbmn

只看该作者 1楼 发表于: 2016-07-19
重发一遍:
mainWindow.h:
#include <QPainter>#include <QDesktopWidget>#include <QSystemTrayIcon>#include <QIcon>class MainWindow : public QWidget{    Q_OBJECT
public:    explicit MainWindow(QWidget *parent = 0);    ~MainWindow();
protected:    void paintEvent(QPaintEvent *event) Q_DECL_OVERRIDE;};
#endif // MAINWINDOW_H

mainwindow.cpp:
#include "mainwindow.h"#include "ui_mainwindow.h"const int SIZE=200;
MainWindow::MainWindow(QWidget *parent) :    QWidget(parent){……    QTimer *timer=new QTimer(this);//    connect(timer,SIGNAL(timeout()),this,SLOT(update()));    connect(timer,&QTimer::timeout,this,&QWidget::update);//    connect(timer,&QTimer::timeout,this,&MainWindow::update);……}

使用connect(timer,&QTimer::timeout,this,&QWidget::update);或者connect(timer,&QTimer::timeout,this,&MainWindow::update);编译错误:error: no matching function for call to 'MainWindow::connect(QTimer*&, void (QTimer::*)(QTimer::QPrivateSignal), MainWindow*, <unresolved overloaded function type>)'
     connect(timer,&QTimer::timeout,this,&QWidget::update);

请问这是怎么回事?该怎么解决?      
快速回复
限100 字节
 
上一个 下一个