?? mainwindow.cpp
字號:
#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 + -