首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >类- Qt Creator中的枚举值

类- Qt Creator中的枚举值
EN

Stack Overflow用户
提问于 2015-02-10 14:14:25
回答 3查看 1.5K关注 0票数 1

我创建了一个包含枚举值的函数类,但是当在我的main.cpp中调用时,我会得到一个“尚未声明”的错误。我想找出我哪里出了问题,但运气不太好。我的类标题,当前(简化为适合这里):

代码语言:javascript
复制
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中,我将信号连接到插槽:

代码语言:javascript
复制
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来说肯定是新的,因为我对它还没有做太多。至少有人能为我指明正确的方向吗?谢谢!

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-02-10 14:24:21

你打电话给你的enum是错误的。它们的作用域由类而不是类对象确定。

试试这个:

代码语言:javascript
复制
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

票数 4
EN

Stack Overflow用户

发布于 2015-02-10 14:30:17

您的代码存在一些主要问题。在连接信号和插槽时,不应该定义值。只应在旧的样式连接语法中提供类型。

此外,当将信号连接到某个时隙时,该信号应该为插槽提供参数。所以这里你没有连接任何信号onClicked_func2,..因为他们显然没有任何争论。(如果onClicked_func2真的是一个信号,它看起来就像一个插槽)

此外,如果要使用枚举类型,则应在类范围中使用枚举,方法是遵循类名如下:

代码语言:javascript
复制
main_funcs::up
票数 0
EN

Stack Overflow用户

发布于 2015-02-10 14:43:53

首先,我建议将构造函数定义放在cpp文件中,而不是在类定义文件中,这将有助于保持事物的整洁,并且不会像在本例中那样忘记关闭构造函数的花括号。

其次,我还建议将枚举保留在类定义之外,这样您就可以在其他类中使用它们,因为它们似乎是非常普遍的逻辑枚举。

第三,信号和插槽不是这样工作的,你需要用相同的时隙签名连接信号--在连接过程中你不能传递实际的参数--我不知道什么东西会起作用,而且在启动过程中也会出现很多连接错误。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28433840

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档