Qt — получить числа в определенной области (из QLineEdit)

У меня есть QTableWidget с некоторыми столбцами и строками, и я хочу добавить фильтр для определенного столбца.

Для этого я добавил QLineEdit в свое окно. Я уже могу фильтровать строки, когда добавляю только одно число в QLineEdit:

for(int i=0; i<tableWidget->rowCount(); i++)
{
    if(!tableWidget->item(i, column)->text().contains(lineEdit->text()))
    {
        tableWidget->hideRow(i);
    }
}

(Слот подключен к textEdited-Signal LineEdit)

Что я хочу сделать сейчас: Когда я пишу что-то вроде этого в QLineEdit: 10-30; Скрыть все строки, в которых нет числа от 10 до 30 (>=10; ‹=30).

У кого-нибудь есть идея, как я могу это решить?


person erniberni    schedule 01.02.2018    source источник


Ответы (1)


Это мое решение.

Проверьте, содержит ли текст lineEdit два числа.

QString test = ui->lineEdit->text();
QStringList lst = test.split('-');
    if (lst.size() == 2)

Преобразуйте их в целые числа.

int low = QString(lst[0]).toInt(), high = QString(lst[1]).toInt();

Теперь давайте перейдем к tableWidget и введем меньше или равно этим двум числам.

for (int i = 1; i <= 100; i++) {
    int row = ui->tableWidget->rowCount();
    ui->tableWidget->insertRow(row);
    ui->tableWidget->setItem(row, 0, new QTableWidgetItem(QString::number(i)));
}

connect(ui->lineEdit, &QLineEdit::textChanged, this, [=](const QString &test) {
    QStringList lst = test.split('-');
    if (lst.size() == 2) {
        int low = QString(lst[0]).toInt(), high = QString(lst[1]).toInt();
        for (int i = 0; i < ui->tableWidget->rowCount(); i++) {
            int temp = ui->tableWidget->item(i, 0)->text().toInt();
            if (temp < low || temp > high) {
                ui->tableWidget->hideRow(i);
            } else {
                ui->tableWidget->showRow(i);
            }
        }
    }
});
person Tazo leladze    schedule 01.02.2018
comment
Это работает идеально! Почти такое же решение: P Спасибо!! - person erniberni; 01.02.2018