0
点赞
收藏
分享

微信扫一扫

Qt 调用对象类型不是函数或函数指针

云上笔记 2022-03-15 阅读 93

Qt 调用对象类型不是函数或函数指针

错误提示:
error: called object type ’ QPushButton * ’ is not a function or function pointer

错误呈现:
在这里插入图片描述

源代码:

//ctrlinterface.cpp



   #if defined(_MSC_VER) && (_MSC_VER >= 1600)
   # pragma execution_character_set("utf-8")
   #endif
   
   #include <QKeyEvent>
   #include "ctrlinterface.h"
   
   CtrlInterface::CtrlInterface(QWidget *parent)
   
    : QWidget{parent}
   
   {  setWindowFlags(Qt::WindowStaysOnTopHint); 
   setWindowTitle("CtrlInterface");  resize(300,450);
   
    Open->setGeometry(90, 50, 100, 50);  Run->setGeometry(90, 150, 100,
   50);  close->setGeometry(90, 250, 100, 50);  Quit->setGeometry(90,
   350, 100, 50);    QFont qbtnFont;  qbtnFont.setFamilies(QStringList()
   << "Helvetica" << "Microsoft YaHei");  qbtnFont.setPointSize(20);
   
    Open->setFont(qbtnFont);  close->setFont(qbtnFont); 
   Run->setFont(qbtnFont);  Quit->setFont(qbtnFont);
   
    connect(this,&CtrlInterface::KeyCtrl,this,[=](){  if(isHidden())  {
   this->show();  }  else  {  this->close();//错误提示!  }  }); }
   
   CtrlInterface::~CtrlInterface(){}
   
   void CtrlInterface::keyReleaseEvent(QKeyEvent *event) { 
   if(event->key() == Qt::Key_Control){  emit KeyCtrl();  } }

//ctrlinterface.h

#ifndef CTRLINTERFACE_H
#define CTRLINTERFACE_H

#include <QWidget>
#include <QPushButton>

class CtrlInterface : public QWidget
{
 Q_OBJECT

public:
 explicit CtrlInterface(QWidget *parent = nullptr);
 ~CtrlInterface();

 QPushButton* Open = new QPushButton("打开",this);
 QPushButton* close = new QPushButton("关闭",this);//错误原因所在!
 QPushButton* Run = new QPushButton("运行",this);
 QPushButton* Quit = new QPushButton("退出",this);

protected:
 void keyReleaseEvent(QKeyEvent *event) override;

signals:
 void KeyCtrl();
};

#endif // CTRLINTERFACE_H

错误原因:
在“ctrlinterface.h”中创建了一个QPushButton对象close,它与Qt中用来关闭窗口的函数close重名,也就是标识符在同一名称空间中指定了两个不同的实体,从而引发错误。

this->close()

这行语句中,原意为使this指向close()函数以关闭窗口,而此时close被误认为一个QPushButton对象,导致出现错误提示:调用对象类型不是函数或函数指针。

修改方法:
将原QPushButton定义的对象close改名为Close即可(C++区分大小写)。

举报

相关推荐

函数指针类型

0 条评论