Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2008/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ Qt,没有命名的信号?_C++_Visual Studio 2008_Qt - Fatal编程技术网

C++ Qt,没有命名的信号?

C++ Qt,没有命名的信号?,c++,visual-studio-2008,qt,C++,Visual Studio 2008,Qt,有没有办法在没有MOC和连接通孔名称的情况下使用信号?我对Qt的一个问题是 this->connect(this->SaveBtn, SIGNAL(click()), SLOT(SaveClicked())); 此->连接(此->保存BTN,信号(单击()),插槽(保存单击()); 没有错误检测来判断错误,然后发现按钮不工作,或者搜索他们的文档来发现信号不存在。另外,通过名称而不是类进行连接似乎是毫无意义的,也是对周期的浪费。除了信号只是方法这一事实之外,没有中间MOC步骤,我不认为您可以像预期

有没有办法在没有MOC和连接通孔名称的情况下使用信号?我对Qt的一个问题是

this->connect(this->SaveBtn, SIGNAL(click()), SLOT(SaveClicked())); 此->连接(此->保存BTN,信号(单击()),插槽(保存单击());
没有错误检测来判断错误,然后发现按钮不工作,或者搜索他们的文档来发现信号不存在。另外,通过名称而不是类进行连接似乎是毫无意义的,也是对周期的浪费。

除了信号只是方法这一事实之外,没有中间MOC步骤,我不认为您可以像预期的那样使用它们。当你把连接搞砸了,而且没有升起任何旗帜时,这是一种痛苦。你最后一句话是什么意思?你能详细说明你的问题是什么吗?信号/插槽不是一个完美的系统,我不认为存在一个完美的系统,但它非常直观,对我来说运行良好。

不,没有真正的解决方法


您必须使用MOC并通过名称连接。但随着时间的推移,你会发现它“在你身上生长”,不会真正困扰你。每次训练自己以小片段的形式添加代码,测试您添加的代码是否有效,这样您就不会有问题。

有错误检测,连接失败时,
connect
函数返回false,并在标准错误时输出警告(或者在Windows上,到DebugView读取的奇怪位置)。您还可以通过在您的环境中设置
QT\u fatal\u warnings=1
将这些警告变成致命错误


用名字连接并不是毫无意义的。例如,这意味着可以在运行时生成信号/插槽名称的位置建立连接。

我通常采用以下编码方式:

m_pCancelPushButton = new QPushButton(tr("Cancel"));
m_pCancelPushButton->setObjectName("CancelButton");


//MetaObject Connections
QMetaObject::connectSlotsByName (this);
这使我能够编写代码

void Class_name::on_CancelButton_clicked()
{
//Do your job here.
    reject();
}
我希望它能帮助你

谢谢,
Rahul

实际上,当信号不存在或连接失败时,会弹出一条调试消息。如果您使用的是IDE,或者如果您将程序编译为有一个控制台窗口,您将看到调试消息。那么,当您可以有一个回调数组时,为什么要使用名称连接呢?即使使用回调数组,如果不必在某个点上指定需要使用名称连接什么,我甚至无法想象它将如何工作。您认为它应该如何具体工作?我个人希望有一个gui库,它可以像.net一样处理事件。我只想使用.net,但我不想将我的项目局限于需要安装.net framework。尤其是对于GUI。连接.net事件时不指定名称?也许我不明白你说的名字是什么意思。对.net来说,你是这样的。“Event+=neweventhandler(Function);”然后调用所有处理程序。“Event(Args);”您还可以在调试时在Visual Studio的“output”窗口中看到调试输出。+1-感谢QT_致命警告-不知道这一点。