1 #include "mainwindow.h"
2
3 MainWindow::MainWindow(QWidget *parent)4 : QMainWindow(parent), db(QSqlDatabase::addDatabase("QMYSQL"))5 {6 db.setHostName("localhost");7 db.setUserName("root");8 db.setPassword("");9
10 setWindowTitle("Table Comment Viewer");11 resize(600, 400);12
13 databaseMenu = menuBar()->addMenu("Database");14 databaseRefleshAction = databaseMenu->addAction("Reflesh");15 databaseMenu->addSeparator();16 databaseActionGroup = new QActionGroup(this);17 databaseActionGroup->setExclusive(true);18
19 connect(databaseRefleshAction, SIGNAL(triggered()), this, SLOT(databaseRefleshActionTriggered()));20 connect(databaseActionGroup, SIGNAL(triggered(QAction*)), this, SLOT(tableRefleshActionTriggered()));21
22 tableMenu = menuBar()->addMenu("Table");23 tableRefleshAction = tableMenu->addAction("Reflesh");24 tableMenu->addSeparator();25 tableActionGroup = new QActionGroup(this);26
27 connect(tableRefleshAction, SIGNAL(triggered()), this, SLOT(tableRefleshActionTriggered()));28 connect(tableActionGroup, SIGNAL(triggered(QAction*)), this, SLOT(tableActionGroupTriggered(QAction *)));29
30 widget = newQWidget;31 setCentralWidget(widget);32
33 layout = newQVBoxLayout;34 widget->setLayout(layout);35
36 tabWidget = newQTabWidget;37 tabWidget->setMovable(true);38 tabWidget->setTabsClosable(true);39 layout->addWidget(tabWidget);40
41 connect(tabWidget, SIGNAL(tabCloseRequested(int)), this, SLOT(removeTab(int)));42
43 databaseRefleshActionTriggered();44 }45
46 MainWindow::~MainWindow()47 {48 }49
50 voidMainWindow::databaseRefleshActionTriggered()51 {52 QList acs = databaseActionGroup->actions();53 foreach (QAction *ac, acs)54 {55 databaseMenu->removeAction(ac);56 databaseActionGroup->removeAction(ac);57 delete ac;58 }59 acs.clear();60
61 QStringList ss;62 QSqlQuery *q = query("show databases;");63
64 while (q->next())65 ss << q->value(0).toString();66
67 foreach (const QString &s, ss)68 {69 databaseActionGroup->addAction(s)->setCheckable(true);70 }71
72 databaseMenu->addActions(databaseActionGroup->actions());73 tableRefleshActionTriggered();74 }75
76 voidMainWindow::tableRefleshActionTriggered()77 {78 int c = tabWidget->count();79 for (int i = 0; i < c; i++)80 {81 tabWidget->removeTab(i);82 }83
84 foreach (QTableView *v, commentViews.values())85 {86 delete v;87 }88
89 commentViews.clear();90
91 QList acs = tableActionGroup->actions();92 foreach (QAction *ac, acs)93 {94 tableMenu->removeAction(ac);95 tableActionGroup->removeAction(ac);96 delete ac;97 }98 acs.clear();99
100 QAction *ac = databaseActionGroup->checkedAction();101 if (!ac)102 return;103
104 QStringList ss;105 QSqlQuery *q = query(QString("show tables from %1").arg(ac->text()));106
107 while (q->next())108 ss << q->value(0).toString();109
110 foreach (const QString &s, ss)111 {112 tableActionGroup->addAction(s)->setWhatsThis("hahaha");113 }114
115 tableMenu->addActions(tableActionGroup->actions());116 }117
118 void MainWindow::tableActionGroupTriggered(QAction *ac)119 {120 QAction *dac = databaseActionGroup->checkedAction();121 if (!dac)122 return;123
124 QString table = ac->text();125
126 int c = tabWidget->count();127 for (int i = 0; i < c; i++)128 {129 if (tabWidget->tabText(i) ==table)130 {131 tabWidget->setCurrentIndex(i);132 return;133 }134 }135
136 if (!commentViews.contains(table))137 {138 QString sql = QString("select column_name, concat(column_type, ' ', ifnull(column_default, '')),"
139 "concat(ifnull(character_set_name, ''), ' ', ifnull(collation_name, ''), ' ', column_key, ' ', extra), column_comment"
140 "from information_schema.columns"
141 "where table_schema = '%1' and table_name = '%2'"
142 "order by ordinal_position;").arg(dac->text()).arg(table);143
144 QSqlQueryModel *model = newQSqlQueryModel;145
146 QSqlQuery *q =query(sql);147 model->setQuery(*q);148
149 model->setHeaderData(0, Qt::Horizontal, "Name");150 model->setHeaderData(1, Qt::Horizontal, "Type & Default");151 model->setHeaderData(2, Qt::Horizontal, "Extra");152 model->setHeaderData(3, Qt::Horizontal, "Comment");153
154 QTableView *view = newQTableView;155 view->setModel(model);156 view->show();157
158 commentViews[table] =view;159 }160
161 int i = tabWidget->addTab(commentViews[table], table);162 tabWidget->setCurrentIndex(i);163 }