www.pudn.com > qt_mysql.zip > MyView.cpp, change:2001-12-24,size:6820b
// MyView.cpp: implementation of the MyView class. // ////////////////////////////////////////////////////////////////////// #include#include #include #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 setLabel(j,codec->toUnicode(fields[j].name)); } MYSQL_ROW row; int rowID=0; while (row=mysql_fetch_row(res)){ for (int i=0;i 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"); }