我如何从另一个班级发出信号?在我的实现如下所示,当我尝试在SerialPort :: open方法中发出信号时,我得到了“未解决的外部符号错误”。 代码,主窗口的头文件:
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
std::shared_ptr<SerialPort> serialPort;
private slots:
void labelchange();
private:
Ui::MainWindow *ui;
};
和cpp文件:
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow),
serialPort(std::shared_ptr<SerialPort>(new SerialPort))
{
ui->setupUi(this);
connect(serialPort.get(), SIGNAL(opened()),this,SLOT(labelchange()));
}
void MainWindow::labelchange()
{
ui->testinLabel->setText("signal connected to slot");
}
和我尝试发出信号时的其他类方法: 头文件:
class SerialPort : public QObject
{
public:
SerialPort();
void open()
signals:
void serial_opened();
}
和cpp文件:
void SerialPort::open()
{
emit serial_opened();
}
答案 0 :(得分:1)
这只是从班级发出的正常信号。不是“来自另一个”类。
你错过了Q_OBJECT
宏,QObject并没有真正解决它:
class SerialPort : public QObject
{
Q_OBJECT
public:
SerialPort();
void open()
signals:
void serial_opened();
}
您需要moc
处理该文件。 (如果文件列在.pro文件中,则自动发生)
答案 1 :(得分:1)
SerialPort应包含Q_OBJECT marco,如下所示:
class SerialPort : public QObject
{
Q_OBJECT
public:
SerialPort();
void open()
signals:
void serial_opened();
}
另外,请检查.pro文件并检查是否在HEADERS部分下添加了SerialPort.h。