如何从另一个类发出信号
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文件,并检查您是否在标题部分下添加了SerialPort.h。
相关文章:
- 如何在qt中将信号和插槽与另一个对象连接 --解决了
- Qt将信号与另一个类方法连接
- 从另一个线程发出信号是否安全?
- 在另一个线程上发出 QObject 信号的正确方法?
- glib:在另一个线程上处理自定义 GMainContext* 循环,不引发信号处理程序
- 连接类实例和另一个类实例中的对话框之间的槽和信号
- 如何让一个线程继续,而另一个线程正在等待C++中的信号量
- 发出来自另一个类的信号
- 更改如何从另一个窗口从Mainwindow接收信号
- 如果不同的线程调用另一个不同线程的相同信号,则需要静音
- 如何从另一个类发出信号
- 如何通过在另一个线程中提出的升压信号更新QT GUI
- 有没有一种方法可以将升压信号直接连接到另一个信号
- qt链接器错误,从另一个线程发出信号
- 如何从另一个线程的 cpp 代码同步调用 qml 信号处理程序
- 如何使用信号和插槽从qt表单中获取id,然后在链表中搜索它并使用另一个表单显示结果
- 使用Qt信号和插槽更改另一个类的标签文本
- Qt:使用信号和插槽从另一个类调用MainWindow::Ui
- C++/Qt-从一个线程到另一个线程槽的信号
- 级联导航窗格:连接到另一个qml文件的对象信号