Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. Qt Development
  3. General and Desktop
  4. QLineEdit editingFinished twice when changing focus?
Forum Update on Monday, May 27th 2025

QLineEdit editingFinished twice when changing focus?

Scheduled Pinned Locked Moved General and Desktop
1 Posts 1 Posters 1.0k Views
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • B Offline
    B Offline
    brman
    wrote on last edited by
    #1

    I know this has been covered a few times before, for instance in this thread....
    http://qt-project.org/forums/viewthread/39775
    but these appear to refer to cases where a message box is used in the slot handler.

    I am a bit stuck as I have it even without any code in the slot handler so stuff like blockSignals() can't solve it.

    For a test, I have an array of QLineEdit which use a signalMapper to connect the editingFinished() signals to a single slot. The signalMapper passes the array index so I can see where the signal came from.
    eg:
    @testenter::testenter(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::testenter)
    {
    // setup the UI according to the .h file
    ui->setupUi(this);

    signalMapper = new QSignalMapper(this);
    
    // init the labels and edit boxes
    for (int i = 0; i < 10; i++)
    {
        pm_label[i] = new QLabel(ui->scrollArea);
        QString text = QString("Number %1").arg(i);
        pm_label[i]->setText(text);
        pm_label[i]->setGeometry(10,20+i*30, 50, 20);
        pm_label[i]->show();
    
        pm_editBox[i] = new QLineEdit(ui->scrollArea);
        pm_editBox[i]->setGeometry(80,20+i*30, 50, 20);
        pm_editBox[i]->show();
    
        signalMapper->setMapping(pm_editBox[i], int(i));
        connect(pm_editBox[i], SIGNAL(editingFinished()), signalMapper, SLOT(map()));
    }
    connect(signalMapper, SIGNAL(mapped(int)), this, SLOT(data_entry(int)));
    

    }

    void testenter::data_entry(int entry)
    {
    //dummy
    }
    @
    When run in the debugger, if I enter data into one box then either hit return or select another box with the mouse (ie change focus) , then it calls data_entry twice, the first time with index of the box that is losing focus and the 2nd time with the box which gets the focus.

    Am I missing something? I expected editingFinished to be the best signal to use if I need to act after data is entered (by either return, tab or mouse click) but it doesn't appear I can use it this way.

    btw. I've been programming off and on for about 30 years but only recently on C++/Qt so be gentle if I am being stupid ;)

    1 Reply Last reply
    0

    • Login

    • Login or register to search.
    • First post
      Last post
    0
    • Categories
    • Recent
    • Tags
    • Popular
    • Users
    • Groups
    • Search
    • Get Qt Extensions
    • Unsolved