[英]How can I emit signal form another class?
我如何從另一個班級發出信號? 在我的實現如下所示,當我嘗試在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();
}
這只是從一類發出的正常信號。 不是“來自另一個”階級。
你缺少Q_OBJECT
宏,QObject實際上沒有用它:
class SerialPort : public QObject
{
Q_OBJECT
public:
SerialPort();
void open()
signals:
void serial_opened();
}
並且您需要讓moc
處理該文件。 (如果文件列在.pro文件中,則自動發生)
SerialPort應包含Q_OBJECT marco,如下所示:
class SerialPort : public QObject
{
Q_OBJECT
public:
SerialPort();
void open()
signals:
void serial_opened();
}
另外,請檢查.pro文件並檢查是否在HEADERS部分下添加了SerialPort.h。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.