连接按钮到任意功能
Connecting button to an arbitrary function
我试图在Qt中编写一个程序,将函数连接到Qt5中的按钮。
#include <QApplication>
#include <QtGui>
#include <QPushButton>
static void insert()
{
qDebug() << “pressed”;
}
int main(int argc,char *argv[])
{
QApplication app(argc,argv);
QPushButton *button=new QPushButton(“button”);
button->setGeometry(50,100,150,80);
QObject::connect(button,&QPushButton::clicked,insert());
button->show();
}
但是我得到的错误像主要。抄送:23:39:error:在这个上下文中主要。Cc:23:55:错误:无效使用void表达式Make: * [main。0]错误1
请帮…
在Qt 5中,您需要使用新的Qt信号和插槽系统。连接如下所示:
QObject::connect(button,&QPushButton::clicked,insert); <-- no parentheses.
前面已经说过了,但是您需要调用app.exec();
来启动事件循环处理。否则连接将永远不会被触发。
此外,如果您处于释放模式,那么您可能看不到qDebug()
* 见下面的编辑
首先你不能把一个信号连接到一个函数,你应该把它连接到某个类的插槽,并且这个类的实例也应该提供给QObject::connect
。
// file 'C.h'
#ifndef __C_H__
#define __C_H__
#include <QtGui>
class C : public QObject{
Q_OBJECT
public slots:
static void insert()
{
qDebug() << "pressed";
}
};
#endif
注意,这个类必须继承QObject
,并且在它里面有Q_OBJECT
关键字。你必须把这个类声明在*.h
文件中(你不能在*.cpp
文件中有Q_OBJECT
,因为Qt不会看到它)。
QObject::connect
,正确的方法是:
QObject::connect(button, SIGNAL(clicked()), &c, SLOT(insert()));
注意,当你连接信号时,你必须使用SIGNAL()
宏和SLOT()
宏。
所以main.cpp
中的代码应该如下:
#include "C.h"
int main(int argc,char *argv[])
{
QApplication app(argc,argv);
QPushButton *button=new QPushButton("button");
button->setGeometry(50,100,150,80);
C c;
QObject::connect(button, SIGNAL(clicked()), &c, SLOT(insert()));
button->show();
return app.exec();
}
你看我是如何为connect()
函数提供一个接收对象(&c
)的实例的,即使你的函数是static
,你也必须这样做。
最后你必须使用app.exec();
,否则你的程序就不会有消息循环。
我没注意到这个问题是关于Qt 5的。对于Qt 5.0,答案是错误的。
相关文章:
- 在执行其他功能的同时播放动画(LED矩阵和Arduino/ESP8266)
- 多态性和功能结合
- 带内存和隔离功能的SQLite
- 在CMakeLists.txt的安装功能中使用.cmake文件有什么用
- 类模板的成员功能的定义在单独的TU中完全专业化
- 有没有一种方法可以创建一个带有哈希表的数据库,该哈希表具有恒定时间查找功能
- 如何在C++中获得"静态纯虚拟"功能?
- 两个文件使用彼此的功能-如何解决
- 我应该实现右值推送功能吗?我应该使用std::move吗
- QML按钮点击功能执行顺序
- 无法理解此 return 语句的功能,没有它就会发生运行时错误
- 有没有可能有一个只有ADL才能找到的非好友功能
- 功能样式转换从 'int' 到 'ItemType' 的匹配转换
- 文件系统:复制功能的速度秘诀是什么
- 在用于格式4的arm模拟器中实现功能时的一个问题
- 如何声明功能接受rvalue的任意长度阵列
- lambda/任意Arity的功能和以捕获为函数参数的功能
- 任意代码的休眠功能
- 传递要使用的功能参数的任意信息
- 连接按钮到任意功能