Qt中DialogKey类发射信号,DialogNetSettings类的槽无法收到

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Qt中DialogKey类发射信号,DialogNetSettings类的槽无法收到相关的知识,希望对你有一定的参考价值。

DialogNetSettings::DialogNetSettings(QWidget *parent) :
QDialog(parent),
ui(new Ui::DialogNetSettings)

ui->setupUi(this);
dia = new DialogKey(this);
connect(dia, SIGNAL(sentstr(QString)), this, SLOT(setString(QString)));

DialogNetSettings::~DialogNetSettings()

delete ui;

void DialogNetSettings::setString( QString a)


ui->ipEdit->setText(a);
qDebug() << a;


class DialogKey : public QDialog

Q_OBJECT

public:
explicit DialogKey(QWidget *parent = 0);
~DialogKey();

private:
Ui::DialogKey *ui;

signals:
void sentstr( QString a);


DialogKey::DialogKey(QWidget *parent) :
QDialog(parent),
ui(new Ui::DialogKey)

ui->setupUi(this);

void DialogKey::on_KeyOk_clicked()

//QString string = ui->lineEdit->text();
emit sentstr(ui->lineEdit->text());
// qDebug() << string;
this->hide();
//exit(0);

参考技术A void DialogKey::on_KeyOk_clicked(),这个信号槽设置了么

Qt 信号映射:编辑发射器对象

【中文标题】Qt 信号映射:编辑发射器对象【英文标题】:Qt signal mapping: editing emitter object 【发布时间】:2013-05-10 16:52:14 【问题描述】:

所以我动态创建 QPushButton 对象,然后将它们映射以发出信号。 从与信号关联的槽中,我想编辑对象的属性(在本例中为文本,即 QPushButton::text())。

在我的头文件中的类“对话框”中:

private:
QSignalMapper *signalMapper;

private slots:
    void buttonGeneric(QPushButton &button);

signals:
    void clicked(QPushButton &button);

在 .cpp 文件的“对话框”类的构造函数中,我有:

signalMapper = new QSignalMapper(this);

for (int i = 0; i < 100; ++i)

    QPushButton *button = new QPushButton(QString::number(i + 1));
    connect(button, SIGNAL(clicked()), signalMapper, SLOT(map()));
    signalMapper->setMapping(button, button);
    ui->gridLayout->addWidget(button, 2 + (i / 10), (i % 10));

connect(signalMapper, SIGNAL(mapped(QPushButton &button)), this, SIGNAL(clicked(QPushButton &button)));
connect(this, SIGNAL(clicked(QPushButton &button)), this, SLOT(buttonGeneric(QPushButton &button)));

最后在我拥有的同一个 .cpp 文件中的构造函数之外:

void dialog::buttonGeneric(QPushButton & button)

   button.setText("hello");

此代码编译并运行,但是当我单击按钮时没有任何反应。在应用程序调试输出中,我得到以下信息:

QObject::connect: No such signal QSignalMapper::mapped(QPushButton &button)
QObject::connect:  (receiver name: 'dialog')
QObject::connect: No such signal dialog::clicked(QPushButton &button)
QObject::connect:  (sender name:   'dialog')
QObject::connect:  (receiver name: 'dialog') 

因此,我再次尝试将单击按钮的文本更改为新内容。 我该怎么做?

提前谢谢你。

【问题讨论】:

【参考方案1】:

QSignalMapper 没有信号 mapped(QPushButton&amp;)。但是,它确实有mapped(QWidget*),它是为您的按钮发出的。所以你应该连接到这个信号(并相应地修改你的对话信号和槽)。

【讨论】:

但是如果我像您建议的那样将 QWidget 作为参数传递,那么我将如何访问 QPushButton 的文本属性? QWidget 没有“setText()”方法。 @user1545986 您可以使用qobject_cast,或者如果您确定对象将始终是您期望的类型,static_cast

以上是关于Qt中DialogKey类发射信号,DialogNetSettings类的槽无法收到的主要内容,如果未能解决你的问题,请参考以下文章

QT多线程里定义信号与发射信号

Qt 信号映射:编辑发射器对象

Qt Jambi (Qt4Dotnet):区分插槽中的信号发射器

不能继承于QObject的类就一定不能使用信号槽?(用一个代理类进行发射就行了)

Qt::ConnectionType(信号与槽的传递方式)

Qml 注册类型的构造函数中的发射信号不起作用