Привет, всем, участникам форума. Пишу курсовую работу. Вот возникла такая необходимость, как "активный поиск". Суть такова. При вводе строки в поле lEdt_Find в tblWgt_Employee отбирались данные, которые соответствуют этой строке без нажатия кнопки "Поиск".
Подскажите, пожалуйста как правильно, используя QSortFilterProxyModel выполнить горячий отбор. Я нашел кучу примеров с QStringListModel. А вот для TableWidget ничего. Заранее спасибо.
Вот код:
| Код | #include "mainwindow.h" #include "ui_mainwindow.h" #include "QtSql" #include "QDebug" #include "QSortFilterProxyModel" MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) { ui->setupUi(this); db = QSqlDatabase::addDatabase("QSQLITE"); QDir::setCurrent(QCoreApplication::applicationDirPath()); db.setDatabaseName("passes.db"); if(!db.open()) { QMessageBox::critical(parent, QObject::tr("Ошибка"), db.lastError().text()); exit(0); } setWindowTitle(tr("База данных пропусков")); fncTblWgtEmployee_Refresh(); connect(ui->lEdt_Find, SIGNAL(textChanged(QString)), SLOT(fncFind())); connect(ui->tblWgt_Employee, SIGNAL(doubleClicked(QModelIndex)), SLOT(fncDlgEditEmployee_Show())); } void MainWindow::fncFind() //Тут поле lEdt_Find. Куда вводится строка поиска { qDebug() << ui->lEdt_Find->text(); // QSortFilterProxyModel proxymodel; // proxymodel.setSourceModel(); // proxymodel.setFilterKeyColumn(1); // proxymodel.setFilterWildcard(ui->lEdt_Find->text()); } void MainWindow::fncTblWgtEmployee_Refresh() //Тут мы заполняем таблицу TableWidget { QSqlQuery qryEmployee_Show; qryEmployee_Show.exec(QString("SELECT pasNumID, lname, fname, ptrnym FROM employee_tbl ORDER BY lname DESC")); QTableWidgetItem *newItem; ui->tblWgt_Employee->setRowCount(0); ui->tblWgt_Employee->setSortingEnabled(true); while(qryEmployee_Show.next()) { ui->tblWgt_Employee->insertRow(0); newItem = new QTableWidgetItem();newItem->setText(qryEmployee_Show.value(0).toString()); ui->tblWgt_Employee->setItem(0,0, newItem); newItem = new QTableWidgetItem();newItem->setText(qryEmployee_Show.value(1).toString()); ui->tblWgt_Employee->setItem(0,1, newItem); newItem = new QTableWidgetItem();newItem->setText(qryEmployee_Show.value(2).toString()); ui->tblWgt_Employee->setItem(0,2, newItem); newItem = new QTableWidgetItem();newItem->setText(qryEmployee_Show.value(3).toString()); ui->tblWgt_Employee->setItem(0,3, newItem); newItem = new QTableWidgetItem(); } ui->tblWgt_Employee->resizeColumnsToContents(); ui->tblWgt_Employee->verticalHeader()->setHidden(true); ui->tblWgt_Employee->setAlternatingRowColors(true); ui->tblWgt_Employee->horizontalHeader()->setStretchLastSection(true); int rowCount = ui->tblWgt_Employee->rowCount(); statusBar()->showMessage(tr ("Количество записей в базе: ") + QString::number(rowCount)); } MainWindow::~MainWindow() { delete ui; }
|
|