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

📄 mainwindow.cpp

📁 跨平台,多数据库查看编辑和查询工具,平台支持windows,linux,数据库支持oracle,odbc,mysql,slite等
💻 CPP
📖 第 1 页 / 共 2 页
字号:
#include "mainwindow.h"
#include <QtDebug>

extern QString g_connectName;

MainWindow::MainWindow()
{	
	//curDatabase=0;
	queryModel=0;

	QSplitter *splitter = new QSplitter(this);
	splitter2 = new QSplitter(this);
	connect(splitter2,SIGNAL(splitterMoved(int,int)),this,SLOT(onSplitterMoved(int,int)));
	tableViewQuery = new TableView(this);
	//MyDelegate *delegate=new MyDelegate(tableViewQuery);
	//tableViewQuery->setItemDelegate(delegate); 	
	//tableViewQuery->hide();
	tableViewQuery->setObjectName("tableviewquery");
	connect(tableViewQuery,SIGNAL(onSum(double)),this,SLOT(onSetSum(double)));
	cornerButton=new QToolButton(this);
	cornerButton->hide();
	cornerButton->setEnabled(false);
	cornerButton->setIcon(QIcon(":/image/closetab.png"));
	cornerButton->setAutoRaise(true);	
	connect(cornerButton,SIGNAL(clicked()),this,SLOT(closeTabWidget()));
	tabWidget = new QTabWidget(splitter);
	tabMenu=new QTabBar(this);

	//tabMenu->setCornerWidget(cornerButton);
	connect(tabMenu,SIGNAL(currentChanged ( int)),this,SLOT(onTabChanged(int)));

	textEdit =new MyTextEdit(this);

	

	// 创建tab页
	stackedWidget  = new QStackedWidget(splitter);
	stackedWidget->addWidget(tableViewQuery);

	tabWidget->setTabPosition(QTabWidget::South);
	tabWidget->setMinimumWidth(155);
	

	// 布局界面
	splitter2->setOrientation(Qt::Vertical);
	splitter2->setOpaqueResize(true);	
	//splitter2->addWidget(tableView);
	//splitter2->addWidget(tabMain);
	splitter2->addWidget(stackedWidget);
	
	QWidget *widget=new QWidget(this);
	QVBoxLayout *layout=new QVBoxLayout(widget);
	QHBoxLayout *hlayout=new QHBoxLayout;
	comboBox=new QComboBox(this);
	hlayout->addWidget(new QLabel("活动连接:",this));
	hlayout->addWidget(comboBox);
	hlayout->addStretch();
	hlayout->setContentsMargins(0,0,0,0);
	layout->addLayout(hlayout);
	layout->addWidget(textEdit);
	layout->setContentsMargins(0,0,0,0);
	widget->setLayout(layout);
	splitter2->addWidget(widget);
	
	QList <int>listWidth;
	listWidth<<1<<0;
	splitter2->setSizes(listWidth);
	
	//splitter->addWidget(tabWidget);
	//splitter->addWidget(splitter2);
	QDockWidget *dockWidget=new QDockWidget("对象列表",this);
	dockWidget->setWidget(tabWidget);
	addDockWidget(Qt::LeftDockWidgetArea,dockWidget);
	
	
	setCentralWidget(splitter2);
	statusBar()->show();

  createActions();
	createMenus();
	createToolBar();
	
	setContentsMargins(0,0,0,0);		
	setWindowTitle(tr("数据库管理"));
	
	db=QSqlDatabase::database(g_connectName);
	db.transaction();
	setWindowState(Qt::WindowMaximized);
	
}
MainWindow::~MainWindow()
{
	db.commit();
	
}

void MainWindow::clear()
{
	comboBox->clear();
	
	for(int i=tabWidget->count()-1;i>=0;i--)
		tabWidget->removeTab(i);
	
	foreach(QWidget *widget,widgetList)
	{
		if(widget->objectName()=="toolbox")
		{
			QToolBox * toolBox=qobject_cast<QToolBox *>(widget);
			for(int i=toolBox->count()-1;i>=0;i--)
		    toolBox->removeItem(i);
			QObject::disconnect(toolBox,0,0,0);
		}
	}

	foreach(QWidget *widget,widgetList)
	{		
		if(widget->objectName()=="tree")
		{
			TreeWidget * treeWidget=qobject_cast<TreeWidget *>(widget);
			treeWidget->closeDb();
			QObject::disconnect(treeWidget,0,0,0);
			widget->close();			
		}
		
	}
	foreach(QWidget *widget,widgetList)
	{
		if(widget->objectName()=="toolbox")
			widget->close();
	}
	widgetList.clear();

}

void MainWindow::loadData()
{	
	tabWidget->setUpdatesEnabled(false);
	QApplication::setOverrideCursor(Qt::WaitCursor);
	clear();	
	comboBox->addItem("系统管理",QVariant(g_connectName));
	
	QString sqlApp="SELECT id,application_name FROM dm_application";	
	QSqlQuery queryApp=db.exec(sqlApp);	
	while(queryApp.next())
	{
	   int application_id=queryApp.value(0).toInt();
	   QString application_name=queryApp.value(1).toString();
	   QToolBox *toolBox = new QToolBox(this);
	   toolBox->setObjectName("toolbox");
	   //toolBox->setAttribute(Qt::WA_DeleteOnClose);
	   widgetList.append(toolBox);
		 tabWidget->addTab(toolBox,application_name);	 
		
	   QString sql=tr("SELECT id,type,server,dbname,username,password,memo FROM dm_connection WHERE application_id=%1 ORDER BY id").arg(application_id);
	   //qWarning(sql.toLatin1().data());
	   QSqlQuery query = db.exec(sql);
	   query.setForwardOnly(true);
	   int a=1;
	
	   while(query.next()) 
	   {
		   ConnectionSetup connection;
		   connection.id=query.record().field("id").value().toInt();
		   connection.type     = query.record().field("type").value().toString();
		   connection.server   = query.record().field("server").value().toString();
		   connection.database = query.record().field("dbname").value().toString();
		   connection.username = query.record().field("username").value().toString();
		   connection.password = query.record().field("password").value().toString();
		   connection.memo     = query.record().field("memo").value().toString();		   	   	 
		   QString message="正在连接 "+connection.memo +" ... ";
		   //qDebug()<<a++<<connection.memo;

		   splashScreen->showMessage(message,Qt::AlignCenter|Qt::AlignBottom);
	   	 TreeWidget *tree = new TreeWidget(this);	   	 
	   	 tree->setObjectName("tree");
	   	 widgetList.append(tree);
	   	 QString connectName=tr("dm_connect_%1").arg(connection.id);	;
	   	 comboBox->addItem(connection.memo,QVariant(connectName));
	   	 
	   	 tree->setConnectionSetup(&db,connection);	   	 
 			 tree->header()->hide();
			 connect(tree,SIGNAL(setTableModel(MySqlTableModel *,const QString)),this,SLOT(createNewTableView(MySqlTableModel *,const QString)));
			 connect(tree,SIGNAL(onShow(QString & )),this,SLOT(setCurrentDatabase(QString & )));
			 connect(tree,SIGNAL(showMessage(const QString &)),statusBar(),SLOT(showMessage(const QString &)));
			 connect(tree,SIGNAL(canEdit(bool)),actOpenTable,SLOT(setEnabled(bool)));
			 toolBox->addItem(tree,QIcon(":/image/database.png"),connection.memo);			 
			 
	   }//end query
	   query.clear();
  }//end queryApp 
  queryApp.clear();  
  tabWidget->setUpdatesEnabled(true);
  db.commit();
  
  QApplication::restoreOverrideCursor();
}


void MainWindow::createActions()
{

	m_pExitAct = new QAction(tr("退出"), this);
	m_pExitAct->setShortcut(tr("Ctrl+Q"));
	m_pExitAct->setIcon(QIcon(":/image/exit.png"));
	connect(m_pExitAct, SIGNAL(triggered()), qApp, SLOT(closeAllWindows()));

	m_pAboutAct = new QAction(tr("&关于"), this);
	m_pAboutAct->setIcon(QIcon(":/image/about.png"));
	connect(m_pAboutAct, SIGNAL(triggered()), qApp, SLOT(aboutQt()));
	
	actReload=new QAction(QIcon(":/image/refresh.png"),"重新载入系统",this);
	connect(actReload,SIGNAL(triggered()),this,SLOT(loadData()));
	
	actOpenTable=new QAction(QIcon(":/image/table_edit.png"),"打开表编辑内容",this);
	actOpenTable->setShortcut(Qt::Key_F4);
	
	connect(actOpenTable,SIGNAL(triggered()),this,SLOT(openTable()));
	
	actDmApplication=new QAction(QIcon(":/image/"),"管理应用",this);
	connect(actDmApplication,SIGNAL(triggered()),this,SLOT(managerApplication()));
	
	actDmConnection=new QAction(QIcon(":/image/"),"管理连接",this);
	connect(actDmConnection,SIGNAL(triggered()),this,SLOT(managerConnection()));
	
	actDmTable=new QAction(QIcon(":/image/"),"管理表缓存",this);
	connect(actDmTable,SIGNAL(triggered()),this,SLOT(managerTable()));
	
	actDmField=new QAction(QIcon(":/image/"),"管理字段缓存",this);
	connect(actDmField,SIGNAL(triggered()),this,SLOT(managerField()));
	
	
	actCloseTab=new QAction(QIcon(":/image/closetab.png"),"关闭当前表",this);
	actCloseTab->setShortcut(tr("Ctrl+W"));
	actCloseTab->setEnabled(false);
	connect(actCloseTab,SIGNAL(triggered()),cornerButton,SLOT(click()));

	actExecuteSql=new QAction(QIcon(":/image/execute.png"),"执行SQL查询语句...",this);
	actExecuteSql->setEnabled(false);
	actExecuteSql->setShortcut(Qt::Key_F5);	
	connect(actExecuteSql,SIGNAL(triggered()),this,SLOT(executeSql()));

}

void MainWindow::createMenus()
{
	m_pFileMenu = menuBar()->addMenu(tr("&F.文件"));
	//m_pFileMenu->addAction(m_pSaveAct);
	m_pFileMenu->addSeparator();
	m_pFileMenu->addAction(m_pExitAct);

	menuBar()->addSeparator();

	m_pEditMenu = menuBar()->addMenu(tr("&E.编辑"));
	

	m_pEditMenu->addAction(actOpenTable);
	m_pEditMenu->addAction(actCloseTab);
	menuBar()->addSeparator();
	m_pEditMenu->addAction(actExecuteSql);
	/*
	m_pEditMenu->addAction(tableView->getInsertRowAction());
	m_pEditMenu->addAction(tableView->getAppendRowAction());
	m_pEditMenu->addAction(tableView->getDeleteRowAction());
	m_pEditMenu->addAction(tableView->getCommitAction());
	m_pEditMenu->addAction(tableView->getRollbackAction());	
	m_pEditMenu->addSeparator();
	m_pEditMenu->addAction(tableView->getFilterAction());	
	m_pEditMenu->addAction(tableView->getFindAction());	
	*/
	
	m_pManagerMenu=menuBar()->addMenu(tr("&M.系统管理"));
	m_pManagerMenu->addAction(actDmApplication);
	m_pManagerMenu->addAction(actDmConnection);
	m_pManagerMenu->addAction(actDmTable);
	m_pManagerMenu->addAction(actDmField);
	
	
	QAction *action=new QAction(this);
  action->setSeparator(true);
  m_pManagerMenu->addAction(action);
  action=new QAction("清除所有表缓存和字段缓存",this);
  connect(action,SIGNAL(triggered()),this,SLOT(clearCache()));
  m_pManagerMenu->addAction(action);
  
  action=new QAction(this);
  action->setSeparator(true);
  m_pManagerMenu->addAction(action);

  action=new QAction("设置显示*号列",this);
  connect(action,SIGNAL(triggered()),this,SLOT(setXHColumn()));
  m_pManagerMenu->addAction(action);
  

	m_pHelpMenu = menuBar()->addMenu(tr("&H.帮助"));
	m_pHelpMenu->addAction(m_pAboutAct);

} 


void MainWindow::createToolBar()
{
	m_pToolBar = new QToolBar(this);
	//m_pToolBar->addAction(actReload);
	m_pToolBar->addSeparator();
	m_pToolBar->addAction(actOpenTable);
	//m_pToolBar->addAction(actCloseTab);
	m_pToolBar->addSeparator();
	m_pToolBar->addAction(actExecuteSql);
	
	/*
	m_pToolBar->addAction(tableView->getCloseAction());	
	m_pToolBar->addAction(tableView->getCommitAction());
	m_pToolBar->addAction(tableView->getRollbackAction());
	m_pToolBar->addSeparator();
	m_pToolBar->addAction(tableView->getInsertRowAction());
	m_pToolBar->addAction(tableView->getAppendRowAction());
	m_pToolBar->addAction(tableView->getDeleteRowAction());
	m_pToolBar->addSeparator();
	m_pToolBar->addAction(tableView->getFilterAction());
	m_pToolBar->addAction(tableView->getFindAction());	
	*/
	addToolBar(m_pToolBar);
	
	QToolBar *toolbar=new QToolBar(this);
	//toolbar->addWidget(cornerButton);
	toolbar->addAction(actCloseTab);
	toolbar->addWidget(tabMenu);
	addToolBar(toolbar);
	//splitter2->addWidget(tabMenu);
}





void MainWindow::showText(QString text)
{
	QMessageBox::information(this,tr("数据库管理"),
		text,
		QMessageBox::tr("确定"));
}



void MainWindow::setCurrentDatabase(QString & strConnectName)
{
	
	for(int i=0;i<comboBox->count();i++)
	{
		if(comboBox->itemData(i,Qt::UserRole).toString()==strConnectName)
		{
			comboBox->setCurrentIndex(i);
			break;
		}
	}
	//curDatabase=cdb;
	//executeButton->setEnabled(curDatabase->isOpen());
}

void MainWindow::executeSql()

⌨️ 快捷键说明

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