- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
在 Qt Designer 中,我创建了一个 QDialog
窗口并使用 pysideuic
将其编译为一个基类,该基类包含一个 setupUi
方法来初始化所有GUI 元素,我对其进行扩展以实现功能,如下所示:
class MyDialog(QtGui.QDialog, ui_file.Ui_main_dialog):
def __init__(self, parent=None):
QtGui.QDialog.__init__(self, parent)
ui_file.Ui_main_dialog.__init__(self)
self.setupUi(self)
此 setupUi
方法调用了 QtCore.QObject.connect
,用于我在 Qt Designer 中创建的信号槽连接,我还在其中向 GUI 添加了新槽。这些插槽在 pysideuic
生成的基类中不存在,我将它们添加到 MyDialog
类中,例如
def on_list_selection_changed(self):
self.run_btn.setEnabled(len(self.modules_list.selectedIndexes()) > 0)
对于此示例,槽在 Qt Designer 中被称为 on_list_selection_changed()
(带有空参数列表)。
初始化时,MyDialog.__init__
调用 Ui_main_dialog.setupUi
,它最终调用 QtCore.QMetaObject.connectSlotsByName
(后两者带有 MyDialog
实例的 self
当前正在创建)。这会在 sys.stderr
上发出以下行:
QMetaObject::connectSlotsByName: No matching signal for on_list_selection_changed()
尽管如此,当连接 modules_list.itemSelectionChanged()
(modules_list
是一个 QListWidget
)时,信号仍然正确运行并且调用槽。
所以这是我的问题:为什么我会收到此警告?鉴于它似乎无关紧要,我该怎么做才能让它不出现?
编辑:由于我在过去 5 个月内没有收到任何答案,我想我给出了一个完整的示例,以便更容易地重现问题。
这个例子与上面的问题不同,它只使用了一个QLineEdit
实例。这是代码:
import sys
from PySide import QtCore, QtGui
class Ui_Dialog(object):
def setupUi(self, Dialog):
Dialog.setObjectName("Dialog")
self.lineEdit = QtGui.QLineEdit(Dialog)
self.lineEdit.setObjectName("lineEdit")
QtCore.QObject.connect(self.lineEdit, QtCore.SIGNAL("textChanged(QString)"), Dialog.on_lineEdit_changed)
QtCore.QMetaObject.connectSlotsByName(Dialog)
class MainWindow(QtGui.QMainWindow, Ui_Dialog):
def __init__(self, parent=None):
QtGui.QMainWindow.__init__(self, parent)
Ui_Dialog.__init__(self)
Ui_Dialog.setupUi(self, self)
@QtCore.Slot(unicode) # signal with no arguments
def on_lineEdit_changed(self, text):
print 'Changed to', text
if __name__ == '__main__':
app = QtGui.QApplication(sys.argv)
mw = MainWindow()
mw.show()
sys.exit(app.exec_())
请注意,Ui_Dialog
类的代码是由 Qt Designer 的 .ui 文件中的 pysideuic
生成的,但我将其缩短了一点以更好地突出问题。
最佳答案
我在 C++ 中遇到了同样的问题。 connectSlotsByName 被硬编码为在找到无法自动连接的插槽时输出该消息,即使您不需要自动连接,因为您已经明确地自己完成了。您可以使用 qInstallMsgHandler 来抑制一般警告或将消息写在更好的地方,但我认为没有任何方法可以告诉 connectSlotsByName 您不特别关心这种情况。
关于python - PySide:QMetaObject.connectSlotsByName 发出警告 "No matching signal..."但仍然有效..?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16460421/
我有一个 RegistrationList 类,它有一个函数,该函数应该遍历注册指针列表,然后返回传递给该函数的特定注册类型的总费用作为 QString。当我从我的 gui 实现类调用此函数时,它总是
有没有人试过在 QObject 上调用重载运算符 indexOfMethod( "operator<<" ); 将返回 -1 .最好的办法是把你的 operator<<在基类中,使其成为非虚拟的,并让
我需要获取 QMetaObject 以动态创建对象实例。如果我知道这个对象,那么 QObject::metaObject() 就是我所需要的。如果我知道类,那么我可以使用 QObject::stati
我设置了一个QT菜单,它自动与 Action 函数on_actionOpen_triggered()连接。稍后我想将文件名字符串传递给该函数,以便在特殊情况下手动调用该函数。因此,我将函数签名更改为
我想使用QMetaObject::invokeMethod来调用一个对象的方法(稍后它会在另一个线程中运行,然后invokeMethod就派上用场了)。我在 Python 3.3 上使用 PySide
一套建立在 Qt 反射系统之上的数据模型似乎是一种自然的协同作用,但我还没有在 Qt 库本身或来自第 3 方的库中找到这样的东西。有谁知道这样的事情是否存在? 我正在寻找用于编辑和显示 QObject
我既不是 Qt 也不是 C++ 开发人员,但为了完成一项小任务,我必须注册一个 QMetaObject::Connection。 我的问题是,如何正确关闭连接 QMetaObject::Connect
我的类中有一个方法调用QMetaObject::invokeMethod。来自documentation我读到使用 Qt::DirectConnection 应该立即调用插槽。在我的代码中,我似乎体验
可能解决方案很简单,但是从对话框中删除 ButtonBox 后,出现以下错误: QMetaObject::connectSlotsByName: No matching signal for on_b
我有一个“RegistrationList”类,它保存了指向三种不同类型注册的指针列表。我有一个函数 calculateFees() 应该返回其中一种注册类型的总注册费用。我应该使用 QT 元对象系统
为了详细说明模棱两可的标题,我想大致了解元系统是如何动态工作的。 在静态上下文中使用插槽/属性访问器时,调用可能是内联的,毕竟如果有可能为什么不呢? 但是动态场景和查询索引呢?元对象是如何实现的?偏移
我目前正在移植 FitNesse 的 Slim 服务器,但我现在有点卡住了。我得到的是像这样的字符串: ("id_4", "call", "id", "setNumerator", "20") ("i
全网搜索,除this外,没有找到QMetaObject的引用。 .这个类还有其他方法。谁知道在哪里可以找到有关 QMetaObject 类的所有详细信息? 最佳答案 您可以通过下载和阅读来自 http
我正在用 Qt 做一个项目,其中 invoke 方法在单独的线程上运行并从主线程调用。如果我将 QByteArray 作为 const 传递,它会构建并运行。但是,如果我删除它构建的 const 但在
这是 QMetaObject::invokeMethod doesn't find the method 的跟进.调用没有参数的方法是有效的。但是将前面的问题扩展到带参数的方法让我再次失败。 请参阅以
我有一个父类(super class)Common,它继承自QObject。然后我得到了一个类Item,它继承自Common。 Common.h class Common : public QObje
我有以下代码: class A : public QObject { Q_OBJECT public: A() : QObject() { moveToThr
...从静态类和非主线程调用。 简而言之,我有一个类“sapp”,它有另一个静态类“tobj”作为静态成员。为了避免静态订单初始化失败,tobj 在 sapp 的方法中声明,该方法又返回 tobj 实
除了QMetaObject::invokeMethod是否有任何类型安全的方式来异步调用方法/插槽(也就是在 GUI 线程中排队执行)? QMetaObject::invokeMethod没有对函数名
我想创建类 A 的新实例,它继承了派生自 QObject 的基类。 如果 A 不在命名空间中,这可以正常工作,但如果 A 在命名空间中,则此调用返回空指针: QObject *o = metaObje
我是一名优秀的程序员,十分优秀!