#include "ReconFormWidget.h" #include "ui_TabFormWidget.h" #include #include #include #include "components/SlideTableView.h" #include "db/SQLHelper.h" #include "device/DeviceManager.h" #include "ScanSearchCriteriaForm.h" #include "ReconStateDelegate.h" ReconFormWidget::ReconFormWidget(QWidget *parent) : TabFormWidget(parent) , mBtnDiscard(new QToolButton(this)) , mBtnDelete(new QToolButton(this)) , mBtnRefresh(new QToolButton(this)) , mScanTable(new SlideTableView(this)) , mSearchWidget(new ScanSearchCriteriaForm(this)) , mModel(nullptr) { auto layout = new QHBoxLayout(ui->commandWidget); layout->setAlignment(Qt::AlignmentFlag::AlignLeft); mBtnDiscard->setObjectName("btnDiscard"); mBtnDelete->setObjectName("btnDelete"); mBtnRefresh->setObjectName("btnRefreshData"); mBtnDiscard->setText(tr("Discard")); mBtnDelete->setText(tr("Delete")); mBtnRefresh->setText(tr("Refresh")); layout->addWidget(mBtnDiscard); layout->addWidget(mBtnDelete); layout->addSpacerItem(new QSpacerItem(20,20,QSizePolicy::Expanding)); addVerticalLine(layout); layout->addWidget(mBtnRefresh); initDataModel(); //Init content widget mSearchWidget->setObjectName("SearchCriteriaForm"); ui->horizontalLayout->insertWidget(0, mSearchWidget); insertVerticalLine(1,ui->horizontalLayout); auto* contentLayout = new QHBoxLayout(this->ui->contentWidget); contentLayout->setContentsMargins(0, 0, 0, 0); initTableView(contentLayout); connect(mBtnRefresh, &QToolButton::clicked, DeviceManager::Default(), &DeviceManager::updateReconState); connect(DeviceManager::Default(), &DeviceManager::updateReconStateFinished, mModel, &QSqlTableModel::select); connect(mSearchWidget, &ScanSearchCriteriaForm::searchFilterUpdated, this, &ReconFormWidget::updateSearchFilter); } void ReconFormWidget::initTableView(QHBoxLayout *contentLayout) { // TableView for Scan ReconStateDelegate* delegate = new ReconStateDelegate(this); mScanTable->setItemDelegateForColumn(9, delegate); mScanTable->setAlternatingRowColors(true); mScanTable->setSelectionMode(QAbstractItemView::SingleSelection); mScanTable->setEditTriggers(QAbstractItemView::NoEditTriggers); mScanTable->setSelectionBehavior(QAbstractItemView::SelectRows); mScanTable->verticalHeader()->setDefaultSectionSize(38); mScanTable->horizontalHeader()->setStretchLastSection(true); //data from SQLITE // //avoid pan comsumed by tableview! mScanTable->viewport()->ungrabGesture(Qt::PanGesture); mScanTable->setSortingEnabled(true); // enable sortingEnabled mScanTable->setModel(mModel); mScanTable->hideColumn(0); mScanTable->hideColumn(1); mScanTable->hideColumn(5); mScanTable->setColumnWidth(2, 200); mScanTable->setColumnWidth(3, 200); mScanTable->setColumnWidth(4, 300); mScanTable->setColumnWidth(6, 200); mScanTable->setColumnWidth(7, 100); mScanTable->setColumnWidth(8, 200); contentLayout->addWidget(mScanTable); //table current row selection changing event // after sort by column } void ReconFormWidget::initDataModel() { //TODO:单独初始化预防SQL错误 mModel = SQLHelper::getTable("Scan"); mModel->sort(4, Qt::DescendingOrder); updateSearchFilter(); mModel->setHeaderData(2, Qt::Horizontal, tr("Patient ID")); mModel->setHeaderData(3, Qt::Horizontal, tr("Accession Number")); mModel->setHeaderData(6, Qt::Horizontal, tr("Patient Name")); mModel->setHeaderData(4, Qt::Horizontal, tr("Scan Time")); mModel->setHeaderData(7, Qt::Horizontal, tr("Laterality")); mModel->setHeaderData(8, Qt::Horizontal, tr("Operator Name")); mModel->setHeaderData(9, Qt::Horizontal, tr("State")); } void ReconFormWidget::updateSearchFilter() { mModel->setFilter(mSearchWidget->getSearchFilter()); mModel->select(); }