gpt4 book ai didi

qt - Qt耦合信号/槽的无限递归

转载 作者:行者123 更新时间:2023-12-04 22:07:01 25 4
gpt4 key购买 nike

我想我对 Qt 信号/插槽机制的工作原理有一些根本的误解。

我已经完成了示例程序,它们很有意义,但是当我尝试使用它们并修改它们时,我得到了我不明白的结果。我在下面附上了一个代码示例,它是我试图做的事情的简化版本,但肯定不会做我想要的。我是否滥用了信号/插槽机制和/或 QString类(class)?我使用信号/插槽以耦合方式修改事物的方式是否创建了无限循环?非常感谢任何帮助。

// test.cpp
#include <QApplication>
#include <QDialog>
#include <QLineEdit>
#include <QString>
#include <QVBoxLayout>

class myDialog : public QDialog
{
Q_OBJECT

public:
myDialog() : a_( new QLineEdit ), b_( new QLineEdit )
{
QVBoxLayout* layout( new QVBoxLayout( this ) );
layout->addWidget( a_ );
layout->addWidget( b_ );

connect( a_, SIGNAL( textChanged( const QString& ) ),
this, SLOT( aChanged( const QString& ) ) );
connect( b_, SIGNAL( textChanged( const QString& ) ),
this, SLOT( bChanged( const QString& ) ) );
}

private:
QLineEdit* a_;
QLineEdit* b_;

private slots:
void aChanged( const QString& qs );
void bChanged( const QString& qs );
};
#include "test.moc"

void myDialog::aChanged( const QString& qs )
{
b_->setText( QString::number( 2.0 * qs.toDouble() ) );
}

void myDialog::bChanged( const QString& qs )
{
a_->setText( QString::number( 3.3 * qs.toDouble() ) );
}

int main( int argc, char** argv )
{
QApplication a( argc, argv );
myDialog d;
d.show();

return a.exec();
}

最佳答案

因为在 aChanged 中,您编辑 b QLineEdit,它会触发 b...的 textChanged() 信号,导致它调用 bChanged,更改 a..... 等等。

我认为这是你的问题。

您可能想使用 textEdited()反而。

关于qt - Qt耦合信号/槽的无限递归,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5608457/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com