草庐IT

c++ - 如何在退出时调用插槽

我想在我的Qt应用程序关闭之前更新我的数据库。我想要类似connect(this,SIGNAL(quit()),this,SLOT(updateDatabase()))一种方法是引入一个退出按钮,但是如果用户按下Alt+F4是否可以实现此功能? 最佳答案 使用信号aboutToQuit()相反。Thissignalisemittedwhentheapplicationisabouttoquitthemaineventloop,e.g.whentheeventloopleveldropstozero.Thismayhappeneith

c++ - 在 QT 中,我们可以有两个名称相同但参数不同的插槽吗?

我有两个同名信号,它们来自两个不同的类A和B到C类。让voidSomeSignal()是来自classA的信号,没有任何参数。我有另一个信号voidSomeSignal(int)来自另一个类。我需要在C类中以两种不同的方式处理这些信号。我可以在classC中制作两个插槽voidSomeSignal()和voidSomeSignal(int)吗? 最佳答案 是的,它是有效的。但是如果你这样做,你需要以不同于使用Qt5连接语法时的正常方式处理信号/槽的连接。关于如何处理connectingtooverloadedsignalsandsl

c++ - 你如何处理内存管理和信号/插槽?

我有一个对象,它用一个对象发出信号:MyObj*obj=this->generateObj();emitnewObjSignal(obj);deleteobj;我有一个或多个人与此有联系。问题是删除调用在对象接收到信号之前被调用。我该如何处理? 最佳答案 使用智能指针,这样内存管理将自动处理,您将确信您将拥有:没有悬挂指针;没有内存泄漏。在这种情况下,在我看来std::shared_ptr(或std::tr1::shared_ptr或boost::shared_ptr,如果您不使用C++11)是正确的选择:#include//For

c++ - 如何将额外变量传递给 Qt 插槽

我想知道如何将一个单独的变量传递到一个插槽中。我似乎无法让它工作。有什么办法解决这个问题吗?这是我的代码:QTimer*timer=newQTimer();connect(timer,SIGNAL(timeout()),this,SLOT(method(MYVARIABLE)));timer->start(4000); 最佳答案 如果您不想在您的类中声明MYVARIABLE,而是将其绑定(bind)到这个特定的信号/槽连接,您可以将信号连接到C++11lambda,使用Qt5'snewsingal/slotsyntax然后用那个la

c++ - 我怎样才能找出哪个插槽连接到我的信号?

使用Qt5.11。通过覆盖QObject::connectNotify,如果插槽连接到我的信号,我会收到通知:voidconnectNotify(constQMetaMethod&signal)override{if(signal==QMetaMethod::fromSignal(&PromiseBase::resolved())&&isResolved()){//Here,Iwanttocalltheslotimmediately.}}发生这种情况时,我想立即调用该槽——而且只是那个槽,而不是所有其他可能连接到信号的槽。我该怎么做?Qt框架给了我信号,但没有插槽。上下文:我正在研究类

c++ - 为什么这个插槽被调用两次?

我的问题是,当我单击QMenuBar中的某个项目时,相应的槽会被调用两次。我正在使用Qt4.8.1。我既没有使用QtDesigner也没有使用“自动连接”功能。这是我的代码片段:#include#include#includeclassMyWidget:publicQWidget{Q_OBJECTpublic:MyWidget(QWidget*parent=0):QWidget(parent){QMenuBar*menu=newQMenuBar(this);menu->addAction("Clickhere");menu->addAction("Orhere");connect(me

c++ - Qt 信号/插槽示例的链接器错误

我有一个包含多个使用信号和槽的类的Qt应用程序,它编译得很好。但是,当我在主CPP(main.cpp)文件中创建自定义类时,出现链接器错误。这是我使用的代码:classCounter:publicQObject{Q_OBJECTpublic:Counter(){m_value=0;}intvalue()const{returnm_value;}publicslots:voidsetValue(intvalue){if(value!=m_value){m_value=value;qDebug()错误如下:Error4errorLNK2001:unresolvedexternalsymbo

c++ - Qt 没有用于 QProcess::finished() 信号的插槽

我正在尝试从我在Linux中运行的Qt应用程序运行命令行程序gphoto2,并读取它输出到标准输出和标准错误的结果。此概念验证程序中的GUI是一个按钮和一个标签,用于显示标准错误和标准输出的输出。我无法将QtProcess::Finished信号连接到正确的插槽。我从标题、连接语句和函数中的Finished()信号文档中复制了参数列表。函数名称以MainWindow::类标识符为前缀。我已经没有什么可以尝试的了,我希望StackOverflow中的某个人能够指出这个问题。TheHeaderfile:#ifndefMAINWINDOW_H#defineMAINWINDOW_H#inclu

PCIe数据传输卡在显卡插槽找不到卡的解决方案

PCIe卡外观:问题:在实际的操作过程中发现,PCIe数据传输卡插在显卡用X16槽位(研华784主板工控机)会出现找不到卡的现象,导致PCIe卡无法正常使用;思考:经过查阅相关资料,可能是计算机主板针对PCIe部分启动速度过快,PCIe卡上的主控制芯片FPGA还未初始化完成的时候,计算机主板与PCIe卡握手阶段就已经结束,导致计算机无法找到PCIe卡;方案:1,修改主板BIOS中关于X16槽位的参数,以适应FPGA初始化的时间;2,更改FPGA的初始化配置时间,使并行加载方式替代串行加载,要改硬件,本文不再描述;实施:第一步:将PCIe卡插在X16槽位(研华784主板工控机);第二步:在设备管

c++ - 在插槽中调用 QDialog::exec 是否会阻塞主事件循环?

我的Qt应用程序的主窗口是一个普通的QMainWindow子类。在那个窗口中我有几个按钮;每个都有它的clicked信号连接到它自己的插槽,每个插槽创建一个不同的QDialog,如下所示:voidonButtonA_clicked(){MyADialog*dialog=newMyADialog(this);dialog->exec();deletedialog;}我一直在阅读这篇文章:https://wiki.qt.io/Threads_Events_QObjects#Events_and_the_event_loop作者说youshouldnevereverblocktheevent