gpt4 book ai didi

c++ - Qt 连接类到 MainWindow

转载 作者:搜寻专家 更新时间:2023-10-31 01:09:05 26 4
gpt4 key购买 nike

在 Qt 4.8 中,我试图在一个类中获取信号以与 MainWindow 中的槽进行通信,但在执行代码时,我没有得到想要的结果。我有两个连接语句,一个将 MainWindow 中的信号连接到 ser 中的插槽。第一个 connect 语句工作正常并在 ser 中执行 testprint() (运行时它在断点处停止)。第二个连接用于将信号插入到 MainWindow 中的插槽中。但是,这第二个连接不起作用,因为我没有来自 testprint 的信号,而 printtext 只执行了一次。

这里有什么问题?为什么 ser 不发出信号?问候,詹姆斯

MainWindow.cpp

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include "ser.h"

MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);

ser *j = new ser;
j->init();

connect (this, SIGNAL(click()), j, SLOT(testprint()));

// connect testsignal from ser to printtext on MainWindow
connect(j,
SIGNAL(testsignal),
this,
SLOT(printtext(const QByteArray &data)));

}

MainWindow::~MainWindow()
{
delete ui;
}

void MainWindow::on_pushButton_clicked()
{
QByteArray ba1;

ba1.resize(6);
ba1[0]='H'; ba1[1]='e'; ba1[2]='l'; ba1[3]='l'; ba1[4]='o'; ba1[5]='\n';

this->printtext(ba1);
emit click();
}

void MainWindow::printtext(const QByteArray &data)
{
ui->textEdit->insertPlainText(QString(data));
}

MainWindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>

namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
Q_OBJECT

public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
MainWindow * myMain;

private slots:
void on_pushButton_clicked();

public slots:
void printtext(const QByteArray &data);

private:
Ui::MainWindow *ui;

signals:
void click();
};

#endif // MAINWINDOW_H

ser.cpp

#include "ser.h"
#include "mainwindow.h"
#include <QObject>

ser::ser(QObject *parent) :
QObject(parent)
{
}

void ser::init()
{

}

void ser::testprint()
{
QByteArray ba1;

ba1.resize(8);
ba1[0]='S'; ba1[1]= '0'; ba1[2]= ' '; ba1[3]= 'l'; ba1[4]='o'; ba1[5]='n'; ba1[6]='g'; ba1[7]='\n';

emit testsignal(ba1);
}

ser.h

#ifndef SER_H
#define SER_H
#include "mainwindow.h"

#include <QObject>

class ser : public QObject
{
Q_OBJECT
public:
explicit ser(QObject *parent = 0);

void init();

signals:
void testsignal(const QByteArray &data);

private slots:
void testprint();


public slots:


};

#endif // SER_H

最佳答案

在您的代码中:-

connect(j,
SIGNAL(testsignal),
this,
SLOT(printtext(const QByteArray& data)));

您在 testsignal 之后缺少参数,因此它应该是 SIGNAL(testsignal(const QByteArray&))。此外,参数无法命名,因此请删除插槽中的“数据”。

请注意,connect 函数返回一种 QMetaObject::Connection 类型,您可以对其进行测试。如果它返回 NULL,则没有建立连接。

此外,当代码运行连接函数时,调试器输出窗口通常会告诉您连接是否失败。

关于c++ - Qt 连接类到 MainWindow,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17361361/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com