我有一个包含一些列和行的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)。
有人有一个想法,我怎么能解决这个问题?
答案 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);
}
}
}
});