簡體   English   中英

我如何從另一個班級發出信號?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM