问题标签 [qt-slot]

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.

0 投票
1 回答
572 浏览

c++ - 按钮组上的 Qt 信号未连接

我有一个用两个单选按钮定义的按钮组

连接也编译

但它在运行时抛出错误

我承认我不熟悉新的连接语法,但也没有看到明显的错误。怎么了?

0 投票
1 回答
597 浏览

c++ - QTcpServer 应用程序中 Qt C++ 中的插槽和信号

QTcpServer 应用程序中有一个关于 Qt C++ 中的槽和信号的问题。我对插槽和信号方法不是很熟悉。所以......问题是服务器应用程序上的客户端套接字插槽根本没有被调用。我认为我使用了错误参数的连接函数。

我在这里使用连接功能:

...但是这些连接功能无法正常工作。客户端正在连接,onNewConnection 被调用,但来自客户端套接字的事件(插槽)不会出现(readyRead() 等)。服务器能够向客户端发送消息。谢谢。

0 投票
1 回答
793 浏览

python - Qt:多个菜单共享相同的操作但连接到不同的插槽

我有两个具有相同操作的菜单。但我想根据菜单将它们连接到不同的插槽。我可以这样做吗?

下面的代码无法做到这一点,而是将操作连接到两个插槽。

我可以使用相同的名称创建一组不同的操作。我想知道是否有不同的方法可以在不重复所有操作的情况下做到这一点。

运行上面的代码时,点击“File - 1”,我只希望

要打印。相反,它打印

0 投票
2 回答
1322 浏览

c++ - 如何在不使用连接功能的情况下连接信号和插槽?

有没有办法在不使用连接功能的情况下连接信号和插槽?

如果有办法,请举一些例子。

0 投票
1 回答
1505 浏览

c++ - Qt 信号/槽和 C++ Lambda 表达式

为什么这不起作用?

类继承自 QObject

b 是班级孩子。

bar是Foo子。

作为第一个猜测,我认为调用插槽时该栏不再存在。要纠正它,我需要按价值捕获。

我说对了吗?

使其工作的更改:

0 投票
1 回答
885 浏览

python - PyQt5 对话框关闭主窗口

我正在尝试将 PyQT4 代码转换为 PyQt5,这需要新的连接信号样式。当我使用:

一切都按预期工作 - 通过单击确定或取消,对话窗口将关闭。使用新样式的sygnals(我想我做错了什么)

单击确定/取消后,主窗口将关闭,对话框将保留。这绝对不是应该发生的事情。

我究竟做错了什么?

0 投票
2 回答
680 浏览

c++ - CONNECT 无法识别子类的 Qt 自定义 SLOT

背景

我正在用 Qt 编写一个媒体播放器应用程序。我将 QMediaPlayer 子类化并创建了一个新的 SLOT,它能够解释一个 int 并将其作为 qint64 传递给 QMediaPlayer::SetPosition(qint64)。

QMediaPlayer::PositionChanged 向 cslider slider_playback(水平滑块子类)触发一个信号。这使滑块在播放歌曲时移动。还有一些子类标签(clabel)接收关于歌曲持续时间和歌曲播放位置的信号。

问题

我在构建和运行时发生的问题,我收到以下错误:

正在启动 /home/daniel/DeveloperProjects/build-Player-Desktop_Qt_5_9_1_GCC_64bit-Debug/Player...

QObject::connect: ../Player/mainwindow.cpp:23 中没有这样的插槽 QMediaPlayer::set_playback_position(int)

QObject::connect: (发送者名称:'slider_playback')

滑块应该能够控制播放的位置。有问题的代码行之前是文件中的“// Player seek”注释。

我认为该错误表明为 SLOT 引用了基类,而插槽实际上是派生类的一部分。

为什么会发生此错误以及什么操作可以解决该问题?我的 clabel 和 cslider 类中的插槽可以正常工作。不同之处在于这些类具有构造函数和析构函数。我没有在 QMediaPlayer 子类中实现构造函数,因为我不想覆盖基类构造函数。

cmediaplayer.h(完整文件)

cmediaplayer.cpp(完整文件)

mainwindow.h(完整文件)

mainwindow.cpp(完整文件)

0 投票
2 回答
820 浏览

c++ - QProgressBar 连接类之间的进度 - “呼叫没有匹配功能”

在我进行一些计算的一个类和另一个包含带有我的进度条的 GUI 的类之间,我在正确设置信号和插槽方面遇到了一些麻烦。我对 qt 的经验非常少,所以我对信号/插槽的工作方式感觉不太好。我尝试了一些手册和教程,但我仍然不知道如何设置它。

让我们调用进度条类mainwindow

mainwindow.h

mainwindow.cpp

信号是从计算类发出的,叫它短calc

calc.h

calc.cpp

Archiev 部分(上面编辑 的代码)编译结束时出现此错误:没有匹配函数调用 'loading::connect(calc*, const char*, QProgressBar*&, const char*) 我是否以正确的方式使用信号,或者我误解了这个概念?在此计算期间更新进度条值的正确方法是什么?

编辑:代码编辑得更清楚,现在它显示当前问题 - 信号有效,但对 qprogressbar 没有影响。

EDIT2:现在有效 - 必须调用函数sender->doData()。另外正确的分配是sender = new calc(this)calc *sender添加到 mainwidnow.h 的私有部分)。谢谢大家的帮助,尤其是@eyllanesc 指出正确的方法!

0 投票
1 回答
506 浏览

c++ - 为什么 socket::readyRead() 的新信号被执行,即使它的早期插槽仍在处理?

根据以下帖子,仅在当前执行的插槽完成后才提供发出的信号。
等待 SLOT 用 Qt 完成执行

我有一个基于 ssl 套接字的客户端-服务器通信应用程序,它是单线程的。

客户端和服务器相互发送一些自定义消息。无论何时发送或接收消息,它们都会发送ACK字节(00)。
大多数时候,我注意到Read()在执行之间时,下一个readyRead()是执行的!我将调试语句放在myObject->Read(). 他们确认,开始调试被一次又一次地调用。断点也是如此。

当接收到太多数据时,会创建一个包含太多Read()s 的递归堆栈帧。它要么减慢应用程序 GUI 的速度,要么崩溃。
通常,当客户端尝试将 ACK 作为myObject->Read(). 在此期间,readyRead()偶然发出信号并得到服务。然而,前一个信号的时隙仍在处理中。

问题

  • 当插槽仍在中间(单线程)时,Qt 框架是否可以在两者之间提供信号?
  • 如何修复此套接字特定场景?

注意
- 默认情况下,单线程Qt::ConnectionTypeDirectConnection. 我也试过了QueuedConnection,但结果是一样的。
-myObject.Read()相当复杂并且有许多其他的函数调用。如果这引起了问题,那么让我知道我应该寻找什么。编写它的实际代码是不切实际的。

0 投票
1 回答
195 浏览

c++ - Qt 5.9 插槽命名错误

我正在使用 Qt 5.9。

我在用下划线样式声明插槽时遇到问题,特别是当我用超过 2 个下划线命名它时。例如,使用void on_stop_treatment()插槽,即使我没有建立连接,我也会得到QMetaObject::connectSlotsByName: No matching signal for on_stop_treatment().

无论如何,建立连接,即使我收到相同的消息,插槽信号机制也有效。删除第二个下划线我没有收到错误消息并且该机制有效。(我也尝试删除 moc 文件并重建)