使用派生的类对象 Qt 访问基类信号
Accesing Base Class Signal using derived Class Object Qt
嗨,我是Qt和C++的新手。我有一个要求,我必须使用派生类对象访问基类的信号。是否可能,如果是,那么如何?我尝试使用一个简单的应用程序来实现它,但它不起作用。
基类
//在其构造函数中发出信号 temp()
class IPCBase : public QWidget
{
Q_OBJECT
public:
explicit IPCBase(QWidget *parent = 0);
~IPCBase();
signals:
void temp();
private:
Ui::IPCBase *ui;
};
//.cpp
IPCBase::IPCBase(QWidget *parent) :
QWidget(parent),
ui(new Ui::IPCBase)
{
ui->setupUi(this);
qDebug()<<"coming to base cpp";
emit temp();
}
我创建了一个名为 IPCReceiver 的派生类,并使用 IPCReceiver(派生类)的对象,我正在尝试在另一个类(Form) 中使用连接语句并调用 SLOT.It 没有给出编译错误,但插槽没有被调用。
Form::Form(QWidget *parent) :
QWidget(parent),
ui(new Ui::Form)
{
ui->setupUi(this);
IPCReceiver *receiver = new IPCReceiver;
connect(receiver, SIGNAL(temp()), this, SLOT(debug()));
}
提前谢谢。
>你的信号temp()
在类的构造函数中发出。这就是您的连接无法使用的原因。在你的逻辑中:首先在构造函数中发出信号,然后你创建连接。您必须在创建连接后发出信号。
通常不应该从派生自QObject
的任何类的构造函数发出任何信号,因为这会使类更难使用。您需要在构造函数完成后从事件循环发出信号。至少有两个成语可以表达这一点:
使用连接到QObject::destroyed
IPCBase::IPCBase(QWidget *parent) :
QWidget(parent),
ui(new Ui::IPCBase)
{
ui->setupUi(this);
QObject src;
connect(&src, &QObject::destroyed, this, &IPCBase::temp, Qt::QueuedConnection);
}
src
对象仅用作通用信号的源。
使用QMetaObject::invokeMethod
IPCBase::IPCBase(QWidget *parent) :
QWidget(parent),
ui(new Ui::IPCBase)
{
ui->setupUi(this);
QMetaObject::invokeMethod(this, "temp", Qt::QueuedConnection);
}
顺便说一句,你不需要动态分配 Ui ,你可以把它作为一个成员变量;然后编译器生成的默认析构函数就足够了。
相关文章:
- Qt:从另一个窗口访问公共对象
- 使用 Bazel 编译 QT 应用程序时访问资源
- 如何访问QT中传递给程序的参数
- 根据用户名和密码 Qt C++重新访问数据库值
- Qt访问每个类中的查看器对象?
- 项目引用上的QT访问冲突
- 从另一个类 Qt 访问一个类
- QT访问表小部件从单独的线程项目
- Messaging API(MAPI) 通过 Qt 访问
- Qt访问类中的mainWindow而不向其提供对象
- 如何使用Qt访问JSON元素
- 使用派生的类对象 Qt 访问基类信号
- Qt 访问继承类的 D 指针
- 通过C++和Qt访问Googles Book API
- 尝试使用Qt访问Pastebin时,连接超时
- Qt:访问uitools/uiloader生成的小部件的信号/插槽
- 我如何在Qt访问和控制硬件
- Qt c++访问属性
- Qt-访问表中的复选框
- 插槽后Qt访问冲突0xC0000005