void CSteepdnFsolver::CalR4Mode(double P1,double P2,double P3) { int M=4,N=3;// double* x; x=new double[3]; x[0]=p; x[1]=R; x[2]=Q1; int i,j,k,maxiter=10000; double alpha,gtg,dfgtdfg,normf0,normf1; static double fk[4],Df[4][3],xx[3],g[3],dfg[4];// k=0; //iter count ff4(x,fk,P1,P2,P3);// normf0=0.0; for(i=0;i<M;i++) normf0=normf0+fk[i]*fk[i]; again: k=k+1; ff4(x,fk,P1,P2,P3);// fd4(x,Df);// gtg=0.0; for(i=0;i<N;i++) { g[i]=0.0; for(j=0;j<M;j++) g[i]=g[i]+Df[j][i]*fk[j]; g[i]=2.0*g[i]; gtg=gtg+g[i]*g[i]; } dfgtdfg=0.0; for(i=0;i<M;i++) { dfg[i]=0.0; for(j=0;j<N;j++) dfg[i]=dfg[i]+Df[i][j]*g[j]; dfgtdfg=dfgtdfg+dfg[i]*dfg[i]; } alpha=0.5*gtg/dfgtdfg; do { for(i=0;i<N;i++) xx[i]=x[i]-alpha*g[i]; ff4(xx,fk,P1,P2,P3);// normf1=0.0; for(i=0;i<N;i++) normf1=normf1+fk[i]*fk[i]; alpha=0.5*alpha; } while(normf1>normf0); normf0=normf1; for(i=0;i<N;i++) x[i]=xx[i]; normf1=sqrt(normf1); if(normf1<EPSILON) goto endd; if(k>maxiter) goto endd; goto again; endd: iter=k; p=x[0]; R=x[1]; Q1=x[2];// delete[] x; }
int main(int argc, char **argv) { QApplication a( argc, argv ); QWidget w; QVBoxLayout *layout = new QVBoxLayout(&w); // with bug and direct rendering FontDisplay fd1(true, true); layout->addWidget(&fd1); FontDisplay fd2(false, true); layout->addWidget(&fd2); // with bug and indirect rendering: the real problem FontDisplay fd3(true, false); layout->addWidget(&fd3); FontDisplay fd4(false, false); layout->addWidget(&fd4); QLineEdit qle; layout->addWidget(&qle); QObject::connect(&qle, SIGNAL(textChanged(const QString &)), &fd1, SLOT(setText(const QString &))); QObject::connect(&qle, SIGNAL(textChanged(const QString &)), &fd2, SLOT(setText(const QString &))); QObject::connect(&qle, SIGNAL(textChanged(const QString &)), &fd3, SLOT(setText(const QString &))); QObject::connect(&qle, SIGNAL(textChanged(const QString &)), &fd4, SLOT(setText(const QString &))); QHBoxLayout *hlayout = new QHBoxLayout(); layout->addLayout(hlayout); QCheckBox bold("bold"); hlayout->addWidget(&bold); QObject::connect(&bold, SIGNAL(stateChanged(int)), &fd1, SLOT(setBold(bool))); QObject::connect(&bold, SIGNAL(stateChanged(int)), &fd2, SLOT(setBold(bool))); QObject::connect(&bold, SIGNAL(stateChanged(int)), &fd3, SLOT(setBold(bool))); QObject::connect(&bold, SIGNAL(stateChanged(int)), &fd4, SLOT(setBold(bool))); QCheckBox italic("italic"); hlayout->addWidget(&italic); QObject::connect(&italic, SIGNAL(stateChanged(int)), &fd1, SLOT(setItalic(bool))); QObject::connect(&italic, SIGNAL(stateChanged(int)), &fd2, SLOT(setItalic(bool))); QObject::connect(&italic, SIGNAL(stateChanged(int)), &fd3, SLOT(setItalic(bool))); QObject::connect(&italic, SIGNAL(stateChanged(int)), &fd4, SLOT(setItalic(bool))); QSpinBox *fontsize = new QSpinBox(&w); fontsize->setValue(12); fontsize->setMinimum(1); hlayout->addWidget(fontsize); QObject::connect(fontsize, SIGNAL(valueChanged(int)), &fd1, SLOT(setPointSize(int))); QObject::connect(fontsize, SIGNAL(valueChanged(int)), &fd2, SLOT(setPointSize(int))); QObject::connect(fontsize, SIGNAL(valueChanged(int)), &fd3, SLOT(setPointSize(int))); QObject::connect(fontsize, SIGNAL(valueChanged(int)), &fd4, SLOT(setPointSize(int))); w.show(); return a.exec(); }