Есть простой способ добиться этого.
Просто используйте один из сигналов QTableWidget - cellChanged(int,int);
QObject::connect(m_pTableWidget, SIGNAL(cellChanged(int,int)),
this, SLOT(OnTableWidgetCellChanged(int,int)));
Функция внутреннего слота (OnTableWidgetCellChanged (int row, int column)), используйте случай переключения со столбцом для проверки каждого столбца отдельно.
Получите входной текст от пользователя этого конкретного столбца и сохраните его как QString. Теперь преобразуйте эту QString в int, передав логическую переменную и проверив состояние логической переменной. Если это ложь, то введенный пользователем недействительный номер. пример показан ниже:
bool bRetValue = false;
QString strValue = m_pTableWidget->item(row, VALUE_INDEX)->text();
int nValue = strValue.toInt(&bRetValue);
if(bRetValue == false)
{
// show dialog to user to enter only numbers
}
Если вы хотите преобразовать в двойной или другой тип, просто преобразуйте значение в qvariant и выполните ту же процедуру.
QVariant qvarValue(strValue);
double dVal = qvarValue.toDouble(&bRetValue);
if(bRetValue == false)
{
// show dialog to user to enter only numbers
}
Если вы хотите быть более конкретным, вы можете использовать QRegExp или QRegularExpression (Qt5)
QRegularExpression regexp("enter regx here",
QRegularExpression::CaseInsensitiveOption);
QRegularExpressionMatch regxmatch = regexp.match(strValue);
if (regxmatch.hasMatch())
{
// your functionality
}
else
{
// show dialog to user to enter only numbers
}
person
Sairam krishna
schedule
19.07.2020