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++区分大小写)。