我认为我对Qt信号/槽机制的工作原理有一些基本误解。
我已经通过示例程序进行了实践并且它们很有道理,但是当我尝试修改它们时,我得到的结果是我不理解的。下面是一个代码示例,它是我尝试做的事情的简化版本,肯定不会产生我想要的结果。我是否错误地使用了信号/槽机制和QString类?我使用信号/槽以耦合方式修改东西的方式是否创建了无限循环?非常感谢任何帮助。
我已经通过示例程序进行了实践并且它们很有道理,但是当我尝试修改它们时,我得到的结果是我不理解的。下面是一个代码示例,它是我尝试做的事情的简化版本,肯定不会产生我想要的结果。我是否错误地使用了信号/槽机制和QString类?我使用信号/槽以耦合方式修改东西的方式是否创建了无限循环?非常感谢任何帮助。
// 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();
}
b
始终包含一个数字,该数字是a
中数字的2.0倍,并且你希望a
始终包含一个数字,该数字是b
中数字的3.3倍,这是不可能的。 - rohanpm