⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 tableviewfilter.cpp

📁 跨平台,多数据库查看编辑和查询工具,平台支持windows,linux,数据库支持oracle,odbc,mysql,slite等
💻 CPP
字号:
#include <QtSql>
#include <QtDebug>
#include "tableviewfilter.h"
#include "tableview.h"

SpreadSheetDelegate::SpreadSheetDelegate(QObject *parent)
    : QItemDelegate(parent) 
{

}

/*
功能:将QSqlTableModel里的数据全部读入mapValue中,按列存放
*/
void SpreadSheetDelegate::readValue()
{
	QMap <QString,int> map;
	TableView *tv=qobject_cast<TableView *>(parentWidget);
	
	mapValue.clear();
	for(int i=0;i<globalModel->record().count();i++)
	{
		if(tv && tv->isPasswordColumn(globalModel->record().field(i).name()))
		{
			QStringList list;
			mapValue.insert(i,list);

		}
		else{
			
		map.clear();
		for(int j=0;j<globalModel->rowCount();j++)
		{
			QString str=globalModel->data(globalModel->index(j,i)).toString();
			//qDebug()<<i<<j<<str;
			if(str.length())
			{
				
				map.insert(str,0);
			}
		}
		mapValue.insert(i,map.keys());
	  }
	}
}

QWidget *SpreadSheetDelegate::createEditor(QWidget *parent, const QStyleOptionViewItem&,
    const QModelIndex &index) const
{
    QComboBox *editor = new QComboBox(parent);
    if(globalModel && editor)
    {
    	   editor->addItem("(全部)","");
    	   editor->addItem("(空值)","is null");
    	   editor->addItem("(非空值)","is not null");
    	   QStringList list=mapValue.value(index.column());
    	   foreach(QString str,list)
    	   {
    	   	editor->addItem(str,str);
    	   }

    }
    connect(editor, SIGNAL(currentIndexChanged ( const QString &)), this, SLOT(commitAndCloseEditor( const QString &)));
    return editor;
}

void SpreadSheetDelegate::commitAndCloseEditor( const QString &)
{
	
    QLineEdit *editor = qobject_cast<QLineEdit *>(sender());
    emit commitData(editor);
    emit closeEditor(editor);
  
}

void SpreadSheetDelegate::setEditorData(QWidget *editor, const QModelIndex &index) const
{
    QComboBox *edit = qobject_cast<QComboBox *>(editor);
    if (edit) 
    {
        int i=edit->findText(index.model()->data(index, Qt::EditRole).toString());
        edit->setCurrentIndex(i);
    }
    
}

void SpreadSheetDelegate::setModelData(QWidget *editor, QAbstractItemModel *model,
    const QModelIndex &index) const
{
    QComboBox *edit = qobject_cast<QComboBox *>(editor);
    if (edit) 
    {
        model->setData(index, edit->currentText());
    }
}


TableViewFilter::TableViewFilter(QWidget *parent ,QSqlTableModel *modelparm):QDialog(parent)
{
	globalModel=0;
	delegate=0;
	tableWidget=new QTableWidget(this);
	connect(tableWidget,SIGNAL(itemChanged ( QTableWidgetItem *)),this,SLOT(tableChanged ( QTableWidgetItem *)));
	connect(tableWidget,SIGNAL(currentItemChanged ( QTableWidgetItem * , QTableWidgetItem * )),this,SLOT(itemChanged ( QTableWidgetItem * , QTableWidgetItem * )));
	
	QVBoxLayout *layout=new QVBoxLayout(this);
	layout->addWidget(tableWidget);
	
	setLayout(layout);	
	layout->setContentsMargins(0,0,0,0);
	tableWidget->insertRow(0);
	
	if(modelparm)
	{
		globalModel=modelparm;	
		for(int i=0;i<globalModel->record().count();i++)
	  {
		  tableWidget->insertColumn(i);
		  QString strItem=globalModel->headerData(i,Qt::Horizontal).toString();
		  mapField.insert(i,strItem);
		  mapFieldName.insert(i,globalModel->record().field(i).name());
		  tableWidget->setHorizontalHeaderItem(i, new QTableWidgetItem(strItem));
		  //tableWidget->setItem(0,i,new QTableWidgetItem());
		}			  
	  delegate=new SpreadSheetDelegate(tableWidget);
	  delegate->globalModel=globalModel;
	  delegate->parentWidget=parent;
    tableWidget->setItemDelegate(delegate);	
    delegate->readValue();
  }  



  setWindowFlags(Qt::Tool);

	setMinimumWidth(600);
	setMinimumHeight(100);
	
	setWindowTitle("设置过滤条件");

}
TableViewFilter::~TableViewFilter()
{

}

void TableViewFilter::tableChanged ( QTableWidgetItem *curitem)
{
	QTableWidgetItem *item=curitem;
	QString filter;
	
	  for(int c=0;c<tableWidget->columnCount();c++)
	  {
  		item=tableWidget->item(0,c);
		  if(item)
		  {
  		  QString s=item->text().trimmed();
  		  if(s=="(全部)")
  		  	s="";
		    if(!s.isNull() && s.length()>0)
		    {
		    	if(s=="(空值)")
		    		filter.append(mapFieldName.value(c) + tr(" is null ")  );
		    	else if(s=="(非空值)")
		    		filter.append(mapFieldName.value(c) + tr(" is not null ")  );
		    	else
		    		filter.append(mapFieldName.value(c) + tr("='%1'").arg(s)  );
  		  }
  		  if(filter.right(5)!=" AND ")
    			filter.append(" AND ");
	    }
	  }
 
	  if(filter.left(5)==" AND ")
  		filter=filter.mid(5);
  	if(filter.right(5)==" AND ")
		  filter=filter.mid(0,filter.length()-5);
	
	  if(filter.length()==0)
  		filter="1=1";
  	qDebug()<<filter;
	  if(globalModel )
	  {
  		globalModel->setFilter(filter);
	  	globalModel->select();
  		TableView *tv=qobject_cast<TableView *>(this->parent());
  		if(tv)
  		{
  			tv->resizeColumnsToContents ();
  			tv->resizeRowsToContents ();
  		}

	  }
  
}

void  TableViewFilter::itemChanged ( QTableWidgetItem * cur, QTableWidgetItem * pre)
{
	tableWidget->editItem( cur);
}

void TableViewFilter::setType(int nType)
{
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -