📄 myview.cpp
字号:
// MyView.cpp: implementation of the MyView class.
//
//////////////////////////////////////////////////////////////////////
#include <qtoolbar.h>
#include <qtoolbutton.h>
#include <qstatusbar.h>
#include "xpmimage.h"
#include "MyView.h"
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
MyView::MyView( QWidget *parent, const char *name)
//:QVBox( parent, name)
{
this->setCaption("MyQuery");
//First Create Frame
QMenuBar* menu = new QMenuBar( this ); //Menu
QToolBar* tool=new QToolBar(this,"toolbar"); //ToolBar
QSplitter* split=new QSplitter( this ); //Main view
QStatusBar* status=statusBar(); //StatusBar
split->setOrientation( Vertical );
setCentralWidget( split );
//insert widget to split
m_edit=new QGBKEdit(split);
m_edit->setFont(QFont("Times"));
m_table=new QTable(2,2,split);
m_table->setReadOnly(true);
//create pixMap image
QPixmap pixFileNew( new_xpm );
QPixmap pixFileOpen( open_xpm );
QPixmap pixFileSave( save_xpm );
QPixmap pixExec( exec_xpm );
QPixmap pixConnect( connect_xpm );
QPixmap pixDisconn( disconn_xpm );
split->setOpaqueResize(FALSE);
//create menu
QPopupMenu *file = new QPopupMenu( this );
QPopupMenu *menuEdit = new QPopupMenu( this );
QPopupMenu *query = new QPopupMenu( this );
QPopupMenu *help = new QPopupMenu( this );
file->insertItem( pixFileNew, "&New",m_edit,SLOT(newFile()), CTRL+Key_N );
file->insertItem( pixFileOpen, "&Open",m_edit,SLOT(openFile()), CTRL+Key_O );
file->insertItem( pixFileSave,"&Save",m_edit,SLOT(saveFile()), CTRL+Key_S );
file->insertItem( "Save &As",m_edit,SLOT(saveasFile()));
file->insertItem( "&Close", m_edit,SLOT(closeFile()));
file->insertSeparator();
file->insertItem("Exit",qApp,SLOT(quit()));
menuEdit->insertItem("&Undo",m_edit,SLOT(undo()),CTRL+Key_Z);
menuEdit->insertItem("&Redo",m_edit,SLOT(redo()),CTRL+Key_Y);
menuEdit->insertSeparator();
menuEdit->insertItem("Cu&t",m_edit,SLOT(cut()),CTRL+Key_X);
menuEdit->insertItem("&Copy",m_edit,SLOT(copy()),CTRL+Key_C);
menuEdit->insertItem("&Paste",m_edit,SLOT(paste()),CTRL+Key_V);
menuEdit->insertItem("Clear",m_edit,SLOT(clear()));
menuEdit->insertSeparator();
menuEdit->insertItem("Find",m_edit,SLOT(findEdit()));
menuEdit->insertItem("Replace",m_edit,SLOT(replaceEdit()));
query->insertItem(pixConnect, "&Connect", this, SLOT(Connect()));
query->insertItem(pixDisconn, "&DisConnect", this, SLOT(Disconnect()), CTRL+Key_D );
query->insertItem(pixExec, "Exec",this,SLOT(Exec()),Key_F5);
help->insertItem("About MyQuery",this,SLOT(aboutMe()));
help->insertItem("About QT",this,SLOT(aboutQT()));
menu->insertItem( "&File", file );
menu->insertItem("&Edit",menuEdit);
menu->insertItem("&Query",query);
menu->insertItem("&Help",help);
//create toolbar
QToolButton * tbfileNew
= new QToolButton( pixFileNew, "New File", "new file",
m_edit, SLOT(newFile()), tool, "new file" );
QToolButton * tbfileOpen
= new QToolButton( pixFileOpen, "Open File", "open file",
m_edit, SLOT(openFile()), tool, "open file" );
QToolButton * tbfileSave
= new QToolButton( pixFileSave, "Save File", "save file",
m_edit, SLOT(saveFile()), tool, "save file" );
tool->addSeparator();
QToolButton * tbConnect
= new QToolButton( pixConnect, "Connect Server", "Connect Server",
this, SLOT(Connect()), tool, "Connect Server" );
QToolButton * tbExec
= new QToolButton( pixExec, "Execute Script", "Execute Script",
this, SLOT(Exec()), tool, "Execute Script" );
QToolButton * tbDisConnect
= new QToolButton( pixDisconn, "DisConnect Server", "DisConnect Server",
this, SLOT(DisConnect()), tool, "DisConnect Server" );
//create status
status->message( "Ready", 2000 );
//其它
m_bConnected=false;
mysql=new MYSQL;
mysql_init(mysql);
}
MyView::~MyView()
{
delete mysql;
delete m_edit;
delete m_table;
}
bool MyView::Connect()
{
if (m_bConnected){
int reValue=QMessageBox::warning(this,"MyQuery",
"Now there is a available connection.\nDo you want disconnect it and connect another?",
QMessageBox::Yes ,
QMessageBox::No|QMessageBox::Default);
if (reValue==QMessageBox::Yes){
Disconnect();
}else{
return true;
}
}
MyConnDlg widget;
widget.setMySQL(mysql);
if (widget.exec()!=QDialog::Accepted)
return false;
m_bConnected=true;
return true;
}
bool MyView::Disconnect()
{
if (!m_bConnected)
return true;
mysql_close(mysql);
m_bConnected=false;
return true;
}
bool MyView::Exec()
{
if (!m_bConnected){
QMessageBox::warning(this,"NO Connected","Now you don't connect to any MySQL server.please try to connect!");
return false;
}
QString sql;
if (m_edit->hasSelectedText())
sql=m_edit->selectedText();
else
sql=m_edit->text();
if (sql.isEmpty())
return false;
if (mysql_real_query(mysql,sql,(int)sql.length())==0){
MYSQL_RES* result=mysql_store_result(mysql);
showRes(result);
mysql_free_result(result);
}else{
showError();
}
return true;
}
void MyView::showRes(MYSQL_RES* res)
{
initTable();
if (res==NULL){
m_table->setNumCols(1);
m_table->setNumRows(1);
m_table->setText(0,0,"operation is successful.");
return;
}
int fieldNum=mysql_num_fields(res);
int rowNum=mysql_num_rows(res);
QTextCodec *codec = QTextCodec::codecForName("GBK");
m_table->setNumCols(fieldNum);
m_table->setNumRows(rowNum);
MYSQL_FIELD* fields=mysql_fetch_fields(res);
QHeader* header=m_table->horizontalHeader();
for (int j=0;j<fieldNum;j++){
header->setLabel(j,codec->toUnicode(fields[j].name));
}
MYSQL_ROW row;
int rowID=0;
while (row=mysql_fetch_row(res)){
for (int i=0;i<fieldNum;i++){
QString value=row[i];
m_table->setText(rowID,i,codec->toUnicode(value) ?codec->toUnicode( value):"NULL");
}
rowID++;
}
}
void MyView::showError()
{
initTable();
m_table->setNumCols(1);
m_table->setNumRows(1);
m_table->setText(0,0,(QString)mysql_error(mysql));
}
void MyView::initTable()
{
assert(m_table);
m_table->setNumCols(0);
m_table->setNumRows(0);
}
void MyView::aboutMe()
{
QString s=QString("This is a query analyzer for MySQL.\nAuthor:SoftMusic\nEmail:mysql_gu@163.net\nVersion: 0.0.3\nCopyRight(C) 2001");
QMessageBox::about(this,"MyQuery",s);
}
void MyView::aboutQT()
{
QMessageBox::aboutQt(this,"MyQuery");
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -