问题标签 [qt-signals]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - QT/c++ 调用父方法的最佳方式
我需要使用 A 类中的一种方法(称为 write)来控制文件 I/O。然后 A 通过调用 A.write() 实例化另一个需要写入文件的 B 类(不基于 A)。
实现这一目标的最佳方法是什么?
我应该将 Class.functionname (A.write) 作为参数传递给 B.sometfunction 以进行回调吗?
我应该让 A.write 一个插槽,并允许 B 发出信号吗?
有没有更好的办法?(我将 QT 5 与 C++ 一起使用)
好的,还有一些信息可以帮助解释:A 是线程的集合,每个都是 TcpSocket(来自客户端的控制台会话) B 是我的记录器类,并且是单例模式。A线程有时必须将消息记录到文件中,B使用互斥锁格式化并写入文件。这些相同的(格式化的)消息应该写入控制台(每个 A 线程的唯一套接字,因此不能是静态方法)。所以 A.something 调用 B.write (到文件),然后 B.write 需要调用 A.write (到控制台)。
c++ - Qt 信号和槽:权限
SO上的受人尊敬的答案与实际的Qt文档之间存在差异。
我已经阅读了这个问题,我想要进一步澄清。任何人都可以确认:
- 信号总是
protected
,因此它只能由类或其任何子类发出。我不确定这是不是真的;上面的问题显示了支持这一说法的答案。但是Qt 文档说:Signals are public access functions and can be emitted from anywhere, but we recommend to only emit them from the class that defines the signal and its subclasses.
那是什么? - 插槽只是功能,因此可能是公共的、私有的或受保护的。显然,如果插槽是公共的,则外部类将能够控制您的类是否将其自己的信号之一连接到其自己的插槽之一。但是,SO 信息再次与文档不同,文档中说:
a signal emitted from an instance of an arbitrary class can cause a private slot to be invoked in an instance of an unrelated class.
这意味着private
信号/插槽机制不尊重吗? signal
public、private、protected 这些词在使用关键字时没有用处- 发出的信号始终可供所有其他类使用,也就是说,任何其他类都可以始终连接到该信号(无论其是否允许发出信号)。
- 尽管所有类都可以查看所有信号,但您仍然可以有两个具有相同名称的信号的类,因为该
connect
函数将类名作为信号前缀(即SomeClass::itsSignal
)
c++ - 将 qnetworkaccessmanager 连接到插槽
现在我有这个代码:
请求者.h
请求者.cpp
而这个错误:
怎么了?我尝试只使用连接而不是 QObject::connect,但是关于无法将 QNetworkAccessmanager 转换为套接字的错误。
c++ - 从QObject继承后的Qt“信号未定义引用错误”
我最近需要向一个类添加一个信号,所以我将类更改为继承自 QObject 并将 Q_OBJECT 宏添加到类定义中。由于这样做,我在下面的类行中收到“'vtable for CLICommand' 的信号未定义参考错误”错误:
和下一行的第二个错误“signal undefined reference error for 'vtable for CLICommand'”(初始化成员变量):
就在这里,我发出信号。发射行生成对 `CLICommand::signal_shutdown_request()' 的错误未定义引用:
我已经阅读了很多关于这个主题的帖子,但似乎没有一个适用。我什至尝试过 clean/rebuildall。我没有使用 boost 或其他库......只是 QT 5
有人可以告诉我我做错了什么吗?
解决方案:在 QT Creator 中,右键单击项目,选择 RUN QMAKE,然后全部重建。关于运行 REBUILD ALL 的其他帖子不正确......它自己不会运行 qmake。
c++ - QTcpSocket 的 QThread 没有发出完成的信号
我创建了一个(有点)简单的 telnet 服务器,它为每个连接创建一个新线程:
断开 telnet 客户端后,我希望调用 deleteLater() 插槽。但是,telnet 服务器的 findchildren 显示我的(刚刚断开的)会话的 QThread 对象仍然存在。就好像完成的信号没有发出。
作为一项实验,我将完成的信号与 Qdebug 的“FINISHED”函数联系起来......它永远不会出现。有人可以解释为什么在我断开 telnet 客户端后没有发出完成的信号吗?
我假设调用 thread.disconnectClient() 会终止线程......但也许这是一个不正确的假设?我必须退出线程的 exec 循环吗?
c++ - 如何在 Qt 中检测 Windows 关闭或注销
我正在将一个 Linux 应用程序移植到用 Qt 编写的 Windows。应用程序需要在关闭前保存一些设置。在 Linux 上,我们可以通过 SIGTERM 等的信号处理程序来做到这一点。我如何在 Windows 上实现相同的功能。
c++ - 将结构传递给Qt中的信号
我想在 Qt 中发送一个带有信号的结构。我怎样才能做到这一点?我知道如何用信号发送整数、字符串、图像等,但对结构部分感到困惑。我阅读了一些帖子并发现了有关 Q_DECLARE_METATYPE() 的信息,但我不明白如何使用它。
我在非命名空间范围类中得到 re 1.explicit specialization 的错误。2.模板的特殊化必须出现在命名空间范围 3. struct QMetaTypeId 用不同的访问重新声明。有人可以告诉我哪里出错了。
c++ - Qt 信号槽不工作
我想从第二个窗口更新第一个窗口中标签中的文本,其中是行编辑以编写一些文本。此文本应显示在第一个窗口中。我花了一个星期的时间。著名的连接不起作用。有人纠正下面的代码并解释连接应该如何工作吗?我在5.1.1版本中使用 Qt
第一个窗口.h
第二个窗口.h
主文件
第一个窗口.cpp
第二个窗口.cpp
qt - Qt 信号槽混淆
我正在做一个项目,我必须创建一个从类的构造函数到它在内部初始化的类的 Qt 信号槽连接。这就是代码的样子。我希望下面提到的两个连接都可以工作,但是从输出的建议来看,只有 connection#1 可以工作。我的问题是如何使连接#2 工作!
A级
B类
主要的
}
输出
c++ - 单击按钮时显示另一个 ui 文件
我的第一个 Qt 窗口上有一个按钮。单击按钮时,当前窗口的 ui 应更改为不同 ui 文件的 ui。现在,当我单击按钮时,会打开一个新窗口,但旧窗口仍然打开。有没有办法用不同的内容替换当前窗口的内容?还是最好简单地打开另一个窗口并销毁第一个窗口?
主窗口.cpp