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. QTableWidget->setItem triggers on_tableWidget_itemChanged slot
Forum Updated to NodeBB v4.3 + New Features

QTableWidget->setItem triggers on_tableWidget_itemChanged slot

Scheduled Pinned Locked Moved Unsolved General and Desktop
qtablewidget
2 Posts 2 Posters 1.3k Views 1 Watching
  • 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.
  • kahlenbergK Offline
    kahlenbergK Offline
    kahlenberg
    wrote on last edited by
    #1

    Hi,
    I have a table and I want to make sure that user input is a hex number. I am checking entered text in on_tableWidget_itemChanged() slot, if it is not hex I set the cell with default value "00000000", but this setting triggers second on_tableWidget_itemChanged slot which I don't want. How can I avoid second call of on_tableWidget_itemChanged slot?

    Or how can I restrict user inputs only for Hex values?

    void MainWindow::on_tableWidgetRegisterList_itemChanged(QTableWidgetItem *writeItem)
    {
        if(TableInit && writeItem->column() == 4) // write column
        {
            bool convertState;
            QTableWidgetItem *nameItem = ui->tableWidgetRegisterList->item(writeItem->row(), 0); // name column
            QString regName = nameItem->text();
            quint32 regWriteVal = writeItem->text().toUInt(&convertState, 16);
            int i = 0;
    
            if(!convertState)  // User input is not hex
            {
                regWriteVal = 0;
                QTableWidgetItem *defaultItem = new QTableWidgetItem;
                defaultItem->setText("00000000");
                defaultItem->setBackground(nameItem->background().color());
                ui->tableWidgetRegisterList->setItem(writeItem->row(), writeItem->column(), defaultItem);  //If user input is not hex, this slot will be recalled again because of this function setItem()
            }
            else
                for(i = 0; i < Registers.size(); i++)
                {
                    if(Registers[i].Name.compare(regName.split('.')[0]) == 0)
                    {
                        Registers[i].Write = regWriteVal;
                        Registers[i].ToSend = convertState;
                        writeItem->setBackground(Qt::yellow);
                        break;
                    }
                }
        }
    }
    
    1 Reply Last reply
    0
    • SGaistS Offline
      SGaistS Offline
      SGaist
      Lifetime Qt Champion
      wrote on last edited by
      #2

      Hi,

      Why not do that at the editor level ? Using e.g. a QStyledItemDelegate. Doing so would avoid user entering anything that's incorrect.

      Interested in AI ? www.idiap.ch
      Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

      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