tags:

views:

88

answers:

1

Hi,

I have two widget mainwindow123 and second-class. In my MainWidget.cpp have one lineedit and button field. Initially I can set the focus on the line edit. But after come from the second.cpp Widget then I could not set the focus on the lineedit. Please help me.. Which place I did the mistake? Thanks in advance.

This is my code MainWidget.cpp

MainWidget::MainWidget(QWidget *parent) :
        QWidget(parent),
        ui(new Ui::MainWidget)
    {
        ui->setupUi(this);
        s = new second();
        connect(ui->pushButton, SIGNAL(clicked()),this,SLOT(callSecond()));

    }

    MainWidget::~MainWidget()
    {
        delete ui;
    }
    void MainWidget::callSecond()
    {
       s->show();

     }

second.cpp

second::second(QWidget *parent) :
    QWidget(parent)
{
    QPushButton *first = new QPushButton("first");
    first->setStyleSheet(
         "background-color:black;"

    );
    QGridLayout *d = new QGridLayout();

    d->addWidget(frist,0,0,1,1);
    setLayout(d);
    connect(first,SIGNAL(clicked()),this,SLOT(first()));
}

void second:: first()
{
    this->hide();
}
+3  A: 

It's because your focus goes to button after you clicked it. You could achieve it by:

  1. Setting a focusProxy http://doc.trolltech.com/4.7/qwidget.html#setFocusProxy
  2. Disabling strong focus on button: http://doc.trolltech.com/4.7/qwidget.html#focusPolicy-prop
  3. Connecting buttons clicked signal to setFocus slot of your QLineEdit
Kamil Klimek
could please provide the sample code? THanks in advance.
Girija
example for which case?
Kamil Klimek
I used the these two lines in the mainWidget.cpp this->ui->lineEdit->setFocusProxy(this->ui->lineEdit);this->ui->lineEdit->setFocusPolicy(Qt::StrongFocus); And this line in callSecond() method.. this->ui->lineEdit->setFocus(Qt::OtherFocusReason); . Is it correct ?
Girija
You didn't understand focusProxy idea. You should set focusProxy to button (so when button gets focus it will automaticly pass it to it's focus proxy). lineEdit by default has StrongFocus, i wrote that you should disable StrongFocus on button. Basicly ui->button->setFocusProxy(ui->lineEdit) should do the thing
Kamil Klimek
Sorry Kamil. Still I am not getting the ans. I followed the what you suggested.. But I could not get the ans.
Girija
I've gave you an answer, your button takes focus after you clicked it, that's why your line edit loses focus. You must bring back focus to your line edit
Kamil Klimek