草庐IT

signals-slots

全部标签

Angular 17+ 高级教程 – Signals

前言在上一篇 ChangeDetection 中,我们有提到MVVM监听ViewModel变化的难题.当年AngularJS和 Knockout.js(下面简称KO)各自选了不同的道路.但如今,事过境迁,Angular最终也走向了KO的道路.这就是这篇的主角Signal。 把variables变成function 在JavaScript,值类型variable无法被监听,Signal的做法是把它们都变成函数。看看KO的代码constcount=ko.observable('defaultvalue');//通过observable方法delcarevariableconstvalue=coun

vue3 + naive ui + Tabs 报错 ‘Slot “default“ invoked outside of the render function‘

警告的异常信息:'Slot"default"invokedoutsideoftherenderfunction'解决方法:如下给Tabs组件加一个defaultValue的默认值即可参考:https://github.com/tusen-ai/naive-ui/issues/3134{colorSegment:"#c6c6c6"}}defaultValue={"one"}>

c++ - boost::signals2 和异常处理

有什么方法可以覆盖在boost::signals2中调用槽的特定时刻并执行某些操作(记录、调试、异常处理)?我想在插槽调用时捕获异常,因为信号/插槽是我代码中的执行路径在各种软件组件之间交叉的地方,并且每个组件都是可选的/可以在运行时禁用如果它行为不端。因此,当插槽调用抛出(可能来自外部库,可能只是std::bad_alloc)时,我希望收到有关它的通知——并知道哪个组件被发送信号——这样我就可以终止该组件。我不知道如何在组合器中执行此操作,因为我无权访问那里的插槽或连接对象?所以我看不到获取任何信息的方法。(更改每个插槽的返回类型是不可行的。)有没有我错过的super简单的方法?如果

c++ - gtkmm 的 g_signal_emit 或 g_signal_emit_by_name 版本是什么?

我在我的程序后台运行一个超时函数,我试图从Gtk::Button发出一个删除事件信号,这是我的构造函数中的代码片段://Glib::SignalProxy1m_deleteSlot;//m_deleteSlot=signal_delete_event().connect(sigc::mem_fun(*this,&AlarmUI::my_delete_event));m_timeout_connection=Glib::signal_timeout().connect_seconds(sigc::mem_fun(*this,&AlarmUI::cb_my_tick),1);`现在,方法:

c++ - 断开并稍后重新连接 Qt 信号

有没有办法暂时断开Qt信号,但存储与其连接的对象列表,以便信号稍后可以重新连接到它们? 最佳答案 http://qt-project.org/forums/viewthread/6820这篇文章讨论了跟踪特定信号的连接列表的方法,该信号可用于在调用断开连接后重新连接它。 关于c++-断开并稍后重新连接Qt信号,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/14144415/

c# - 将 boost::signal 包装到 C# 委托(delegate)

假设我有一个异步库,用nativeC++编写,具有与此类似的接口(interface):classconnection{public:boost::signalsig_connection_made;boost::signalsig_error;voidconnect(conststd::string&host,conststd::string&port);};我想用C#包装。有谁知道使用SWIG或类似东西的方法可以让我将信号绑定(bind)到C#委托(delegate)? 最佳答案 您可以使用SWIG将委托(delegate)从C

c++ - 我应该如何从 parent 的插槽中删除子对象?可能是 boost::asio 特定的

我编写了一个网络服务器类来维护一组std::网络客户端。网络客户端在断开连接时向网络服务器发出信号(通过boost::bind)。当网络客户端断开连接时,客户端实例需要从Set中移除并最终被删除。我认为这是一种常见的模式,但我遇到的问题可能是也可能不是ASIO特有的。我试图精简到只包含相关代码:/**NetworkServer.hpp**/classNetworkServices:privateboost::noncopyable{public:NetworkServices(void);~NetworkServices(void);private:voidrun();voidonNe

c++ - 如果从同一个信号调用两个槽,Qt 可以同时调用它们吗?

如果在两个不同的线程中有两个槽,并且这些槽连接到第三个线程中的信号。两个槽会同时被信号调用还是每次都被同步调用?我问是因为我想发送一些回调数据结构(用QSharedPointer封装)并询问是否需要内部锁定机制。 最佳答案 如果您使用Qt::QueuedConnection将信息传递给线程,则不需要锁定实际的信号/槽调用,因为QueuedConnection机制以线程安全的方式处理此问题。话虽如此,您仍然需要保护您的线程访问的任何共享内存,无论它们是如何调用的。第三个线程发出单个信号以导致调用两个槽这一事实不会改变这一点。

c++ - 这种线程间通信的方法安全吗?

我有3个对象(继承自QObject),每个对象都包含一个单独的std::list。每个对象都在主gui线程(没有父线程)中创建,然后被推送到它自己的线程(使用Qt的QObject::moveToThread())。每个线程都连接到一个图形用户界面,消息在不同线程之间发送数据。每个线程本质上是处理它自己的列表。例如:目标1:数据消费者。它弹出列表的前面(如果存在数据)以供使用。它还有一个可用的SLOT,以便其他线程可以向它推送数据。没有其他对象可以直接访问此列表,只有原始QObject类。目标2:数据的生产者。它将数据推送到它的列表中。它有SLOTS可供其他人“ping”它以获取数据,而

c++ - Qt:某些插槽不会在 Release模式下执行

我正在Qt(MSVC++2008)中做一些简单的程序,只有几个复选框和按钮。在Debug模式下,一切正常,但我不能分发这样的可执行文件,因为大多数人没有安装VisualStudio。当我在Release模式下编译它时,只有2个按钮起作用。我使用QtCreator的“绘图工具”(我猜是QtDesigner)设计了我的窗口。我的头文件中确实定义了这样的插槽:privateslots:voidon_goButton_clicked();//Worksfinevoidon_InputCheckBox_stateChanged(intarg1);//Don'tworkvoidon_outputF