当前位置: 首页 > 知识库问答 >
问题:

QT5信号不激活插槽内的功能

程祯
2023-03-14

大家早上好,谢谢你们抽出时间。

我已经创建了一个魔方程序,我想把它和一个串行链接控制器连接起来。所有的东西都工作得很好并且独立,但是当我把我的线程(串行连接)连接到程序的其余部分时,它就不工作了。

我创建了一个调用立方体旋转函数的信号。 信号被调用,它很好地调用了函数,但是它并没有改变里面的值,这就像是创建了一个新的类实例,而没有直接修改它。 代码被调用为well,但我在qwidget中的显示没有改变。 这里是我的一部分代码,谢谢你的帮助! 对不起我的英语我来自法国:)

立方体。h:

    class Cube : public QWidget {

    Q_OBJECT

private:

    int w[3][3];
    int o[3][3];
    int v[3][3];
    int r[3][3];
    int b[3][3];
    int j[3][3];

    int wPerma[3][3];
    int oPerma[3][3];
    int vPerma[3][3];
    int rPerma[3][3];
    int bPerma[3][3];
    int jPerma[3][3];

public:
    QWidget Fenetre;
    QString str;
    QGridLayout *gridLayout = new QGridLayout(&Fenetre);

    Cube();
.......

public slots:

    void rotationFComplete();
    void rotationBComplete();
    void rotationUComplete();
    void rotationDComplete();
    void rotationLComplete();
    void rotationRComplete();

    void rotationFpComplete();
    void rotationBpComplete();
    void rotationUpComplete();
    void rotationDpComplete();
    void rotationLpComplete();
    void rotationRpComplete();

    void melangeCube();
    void resetCube();signals:
        void MySignal( void );
    };


    class serial : public Cube {
    public:
        int Port();
    };

立方体函数中我的信号的定义:

    QObject::connect(this, SIGNAL(MySignal()), this, SLOT(rotationFComplete()));

我发出信号:

    int serial::Port()
{
    // Serial object

    SerialPortManager serial;
    unsigned char buffer[128]="";
    int ret = 0;

    bool State1 = false,
            State2 = false,
            State3 = false,
            State4 = false,
            State5 = false,
            State6 = false,
            State7 = false,
            State8 = false,
            State9 = false,
            State10 = false,
            State11 = false,
            State12 = false,
            State13 = false,
            State14 = false,
            State15 = false,
            State16 = false;

    int Octet1,Octet2;
    QString temp;

    emit MySignal();
    ......

我的main.cpp:

int main(int argc, char *argv[]){

    QApplication app(argc, argv);
    serial* lecture = new serial();
    Cube c;

    c.affichage2d();

    thread th(&serial::Port, lecture);
    c.Fenetre.show();


    return app.exec();
}

共有1个答案

颛孙越
2023-03-14

系列*讲座多维数据集C是两个不同的对象。 你指的是下面的人吗?

QObject::connect(lecture, &Cube::MySignal, &c, &Cube::rotationFComplete);
 类似资料:
  • 我的测试类: 所以,我这样使用我的类: 我在signal.cpp中得到一个警告:候选函数不可行:第一个参数没有从'void(*)(int)'到'int'的已知转换; 在此代码中: 我该怎么解决?如果我想给我的“emit”方法一个对象或多个参数,我可以做什么? 谢了!

  • 与以顺序方式执行的控制台模式应用程序不同,基于GUI的应用程序是事件驱动的。 执行函数或方法以响应用户的操作,例如单击按钮,从集合中选择项目或鼠标单击等,称为events 。 用于构建GUI界面的窗口小部件充当此类事件的来源。 每个PyQt小部件都是从QObject类派生的,旨在发出“ signal ”以响应一个或多个事件。 信号本身不会执行任何操作。 相反,它“连接”到“ slot ”。 插槽可

  • 信号和槽机制是 Qt 的核心机制之一,要掌握 Qt 编程就需要对信号和槽有所了解。信号和槽是一种高级接口,它们被应用于对象之间的通信,它们是 Qt 的核心特性,也是 Qt不同于其它同类工具包的重要地方之一。 在我们所了解的其它 GUI 工具包中,窗口小部件(widget)都有一个回调函数用于响应 它们触发的动作,这个回调函数通常是一个指向某个函数的指针。在 Qt 中用信号和槽取代 了上述机制。 1

  • 我正在编写一个程序,其中几个生产者生成一些应该由几个消费者处理的数据。由于每条数据的消耗大约需要100ms,而目标平台有很多处理器,所以在我看来,每个生产者和每个消费者都得到自己的线程似乎是很自然的。我的问题是:Qt信号/插槽是将数据块从生产者传递到消费者的好方法吗?还是建议更好的解决方案(强烈首选Qt)。 为了防患于未然,制作者每小时产生几十万个数据。

  • 使用Keras设置神经网络时,您可以使用模型或。我的理解是前者易于设置和管理,并且作为层的线性堆栈运行,并且功能方法对于更复杂的架构很有用,特别是那些涉及共享内部层输出的架构。我个人喜欢使用功能API来实现多功能性,但是,我对LeakyReLU等高级激活层有困难。当使用标准激活时,在顺序模型中可以写: 类似地,在函数API中,可以将上述内容编写为: 然而,当使用LeakyReLU和PReLU之类的

  • 本文向大家介绍vue 使用插槽分发内容操作示例【单个插槽、具名插槽、作用域插槽】,包括了vue 使用插槽分发内容操作示例【单个插槽、具名插槽、作用域插槽】的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了vue 使用插槽分发内容操作。分享给大家供大家参考,具体如下: 单个插槽 除非子组件模板包含至少一个 <slot> 插口,否则父组件的内容将会被丢弃。当子组件模板只有一个没有属性的插槽时,父

  • 当实例的试用期结束时,Navicat Monitor 需要令牌以继续监控该实例。令牌可以作为永久许可证或订阅购买。若要管理你的令牌并许可你的实例,请前往“配置”->“激活令牌密钥和许可实例”。 【注意】永久许可证和订阅方案不能在同一个 Navicat Monitor 上使用。在更改激活方法之前,你需要取消激活令牌密钥或退出你的 Navicat ID。 永久许可证 如果你购买了永久许可证,你将收到一

  • 信号与槽可以通过使用手写代码显式的实现关联 ,也可以运用 QMetaObject 类规定的槽 函数命名范式来实现自动关联。 10.5.1 显式关联 首先我们来看一下,不使用“自动关联规则”的情形。 在下面这段代码里面,我们定义了一个对话框类,它有一个私有的槽 checkValues(), 它用来检验用户提供的值是否正确。 class ImageDialog : public QDialog, pr