【问题标题】:Qt - Get numbers in specific area (from QLineEdit)Qt - 获取特定区域的数字(来自 QLineEdit)
【发布时间】:2018-02-01 06:31:10
【问题描述】:

我有一个包含一些列和行的 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 之间数字的行 (>=10;

有人有想法,我该如何解决?

【问题讨论】:

    标签: qt qt5 qtablewidget qlineedit qtablewidgetitem


    【解决方案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);
                }
            }
        }
    });
    

    【讨论】:

    • 这很完美!几乎有相同的解决方案:P 谢谢!
    猜你喜欢
    • 2015-09-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-04
    • 2012-02-14
    • 2021-03-13
    相关资源
    最近更新 更多