我创建了一个包含枚举值的函数类,但是当在我的main.cpp中调用时,我会得到一个“尚未声明”的错误。我想找出我哪里出了问题,但运气不太好。我的类标题,当前(简化为适合这里):
class main_funcs : public QObject
{
Q_OBJECT
public:
main_funcs(QObject *parent, QQuickView *view)
: QObject(parent), myDialog(view){
IP_is_set = false;
newIP = null;
newIP.resize(50);
local_IPv4 = null;
enum direction {up, down};
enum sys_sides {left, right};
enum sys_control {analog, digital};
public slots:
void myfunc1();
void myfunc2(sys_sides side);
void myfunc3(direction dir);
void myfunc4(sys_control type);
private:
...
...
}在我的main.cpp中,我将信号连接到插槽:
int main(int argc, char *argv[])
{
QGuiApplication app(argc, argv);
// MAIN CONTROL WINDOW:
QQuickView* view = new QQuickView(QUrl("main.qml"));
view->show();
QQuickItem *rect = view->rootObject();
main_funcs *funcs = new main_funcs(0, view);
QObject::connect(rect, SIGNAL(onClicked_func1()), funcs, SLOT(myfunc1()));
QObject::connect(rect, SIGNAL(onClicked_func2()), funcs, SLOT(myfunc2(funcs::up)));
QObject::connect(rect, SIGNAL(onClicked_func3()), funcs, SLOT(myfunc3(funcs::left)));
QObject::connect(rect, SIGNAL(onClicked_func4()), funcs, SLOT(myfunc4(funcs::analog)));错误出现在需要枚举值的函数的类标头中。错误是枚举值“尚未声明”-它是在它上方的公共标题中声明的。我仍然是一个C/C++ newb,对Qt来说肯定是新的,因为我对它还没有做太多。至少有人能为我指明正确的方向吗?谢谢!
发布于 2015-02-10 14:24:21
你打电话给你的enum是错误的。它们的作用域由类而不是类对象确定。
试试这个:
QObject::connect(rect, SIGNAL(onClicked_func2()), funcs, SLOT(myfunc2(main_funcs::up)));
QObject::connect(rect, SIGNAL(onClicked_func3()), funcs, SLOT(myfunc3(main_funcs::left)));
QObject::connect(rect, SIGNAL(onClicked_func4()), funcs, SLOT(myfunc4(main_funcs::analog)));编辑:解决“尚未声明的”错误的,但我意识到您将得到另一个错误。您试图将参数传递到函数指针中,这是行不通的。
一个信号将接受一个参数,您在那里传递的参数将通过Qt传递到您的插槽。您不能控制连接中插槽的参数。您通过传递给信号的内容来控制对插槽的参数。
要获得更多信息,请阅读以下内容:http://doc.qt.io/qt-5/signalsandslots.html
发布于 2015-02-10 14:30:17
您的代码存在一些主要问题。在连接信号和插槽时,不应该定义值。只应在旧的样式连接语法中提供类型。
此外,当将信号连接到某个时隙时,该信号应该为插槽提供参数。所以这里你没有连接任何信号onClicked_func2,..因为他们显然没有任何争论。(如果onClicked_func2真的是一个信号,它看起来就像一个插槽)
此外,如果要使用枚举类型,则应在类范围中使用枚举,方法是遵循类名如下:
main_funcs::up发布于 2015-02-10 14:43:53
首先,我建议将构造函数定义放在cpp文件中,而不是在类定义文件中,这将有助于保持事物的整洁,并且不会像在本例中那样忘记关闭构造函数的花括号。
其次,我还建议将枚举保留在类定义之外,这样您就可以在其他类中使用它们,因为它们似乎是非常普遍的逻辑枚举。
第三,信号和插槽不是这样工作的,你需要用相同的时隙签名连接信号--在连接过程中你不能传递实际的参数--我不知道什么东西会起作用,而且在启动过程中也会出现很多连接错误。
https://stackoverflow.com/questions/28433840
复制相似问题