【发布时间】:2015-02-10 14:14:25
【问题描述】:
我创建了一个包含枚举值的函数类,但是在我的 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++ 新手,而且对 Qt 来说绝对是新手,因为我没有做太多。至少有人能指出我正确的方向吗?谢谢!
【问题讨论】:
-
正如两个答案所指出的,您不能将枚举值放入信号/插槽声明中。但是,您可以放置枚举类型。您可以使用
Q_ENUM宏将枚举公开给 qml。这应该可以简化您的问题。 -
您的代码中有一些奇怪的地方,我看不到您的构造函数 main_funcs 的右大括号。如果真实文件中的右括号正好在“公共插槽”之前:那么这是你的枚举不起作用的方式,这是因为它们是你的构造函数的本地
-
@FélixCantournet 你也可以使用 lambda ......但这通常意味着你没有正确规划你的信号。
-
@Marco - 只是这篇文章中的一个错字,右括号出现在我关闭
main_funcs(QObject *parent...构造函数的代码中。我会尝试再次移动枚举值。