Qt - 获取特定区域的数字(来自QLineEdit)

时间:2018-02-01 06:31:11

标签: qt qt5 qtablewidget qlineedit qtablewidgetitem

我有一个包含一些列和行的QTableWidget,并希望为特定列添加过滤器。

为此,我在我的窗口中添加了一个QLineEdit。 当我在QLineEdit中只添加一个数字时,我已经能够过滤行了

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

(插槽连接到LineEdit的textEdited-Signal)

我现在想做什么: 当我在QLineEdit中写这样的东西时:10-30;隐藏所有行,其数字不在10到30之间(&gt; = 10;&lt; = 30)。

有人有一个想法,我怎么能解决这个问题?

1 个答案:

答案 0 :(得分: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);
            }
        }
    }
});