gpt4 book ai didi

c++ - 类中的枚举值 - Qt Creator

转载 作者:行者123 更新时间:2023-11-30 01:49:47 25 4
gpt4 key购买 nike

我创建了一个包含枚举值的函数类,但在我的 main.cpp 中调用时,我收到“尚未声明”错误。我想弄清楚我哪里出错了,但运气不佳。我的类(class)标题,目前(缩小以适合此处):

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)));

错误出现在需要枚举值的函数的类头中。错误是枚举值“尚未声明”-它在其正上方的公共(public)标题中声明。我仍然是 C/C++ 新手,而且对 Qt 绝对是新手,因为我对它的了解不多。至少有人能指出我正确的方向吗?谢谢!

最佳答案

您对 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

关于c++ - 类中的枚举值 - Qt Creator,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28433840/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com