按照楼上的说法,我改写了代码,但是还是没法运行,编译是通过的,只是运行时出现异常关闭。
具体代码如下: 红色标志的是文件间运行的主要代码,蓝色是我贴出的四个涉及到得文件
//mainwindow.cpp
#include <QtGui/QAction>
#include <QtGui/QMenu>
#include <QtGui/QMenuBar>
#include <QtGui/QKeySequence>
#include <QtGui/QToolBar>
#include <QtGui>
#include <QMessageBox>
#include <QApplication>
#include <QPicture>
#include <QGroupBox>
#include <QRadioButton>
#include <QStandardItemModel>
#include <QSqlQuery>
#include "mainwindow.h"
#include "linkconfig/config.h"
#include "open/open.h"
#include "borderlayout.h"
#include "global.h"
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
{
//textEdit=new QTextEdit;
//this->setCentralWidget(textEdit);
p = (MainWindow*) parent;
openAction = new QAction(tr("打开"), this);
openAction->setShortcut(QKeySequence::Open);
openAction->setStatusTip(tr("Open a file."));
openAction->setIcon(QIcon(":/images/qt-logo.png"));
connect(openAction, SIGNAL(triggered()), this, SLOT(openwindows()));
closeAction=new QAction(tr("关闭窗口"),this);
closeAction->setShortcut(QKeySequence::Close);
//closeAction->setShortcut(QApplication::translate("MainWindow", "Ctrl+X", 0, QApplication::UnicodeUTF8));
configAction=new QAction(tr("连接配置"),this);
connect(configAction,SIGNAL(triggered()),this,SLOT(link()));
exitAction=new QAction(tr("退出"),this);
exitAction->setShortcut(QKeySequence::Quit);
toolsAction=new QAction(tr("工具栏"),this);
runrptAction=new QAction(tr("显示运行记录"),this);
refreshAction=new QAction(tr("刷新"),this);
refreshAction->setShortcut(QKeySequence::Refresh);
aboutAction=new QAction(tr("关于"),this);
QMenu *file = menuBar()->addMenu(tr("文件"));
file->addAction(openAction);
file->addAction(closeAction);
file->addSeparator();
file->addAction(configAction);
file->addSeparator();
file->addAction(exitAction);
QMenu *view = menuBar()->addMenu(tr("视图"));
view->addAction(toolsAction);
view->addAction(runrptAction);
view->addSeparator();
view->addAction(refreshAction);
QMenu *find = menuBar()->addMenu(tr("查询"));
tools = menuBar()->addMenu(tr("工具"));
QMenu *window= menuBar()->addMenu(tr("窗口"));
QMenu *help = menuBar()->addMenu(tr("帮助"));
help->addAction(aboutAction);
moveAction=new QAction(tr("移动"),this);
moveAction->setIcon(QIcon(":/images/smiley.png"));
zoomMenu=new QMenu;
zoomMenu->setIcon(QIcon(":/images/services.png"));
zoomMenu->setTitle(tr("缩放"));
QActionGroup *actionGroup=new QActionGroup(this);
QAction *zoom25=new QAction(tr("25%"),this);
zoom25->setCheckable(true);//设置前面可以勾选
zoom25->setActionGroup(actionGroup);
zoomMenu->addAction(zoom25);
QAction *zoom50=new QAction(tr("50%"),this);
zoom50->setCheckable(true);
zoom50->setActionGroup(actionGroup);
zoomMenu->addAction(zoom50);
QAction *zoom100=new QAction(tr("100%"),this);
zoom100->setActionGroup(actionGroup);
zoom100->setCheckable(true);
zoomMenu->addAction(zoom100);
QAction *zoom150=new QAction(tr("150%"),this);
zoom150->setActionGroup(actionGroup);
zoom150->setCheckable(true);
zoomMenu->addAction(zoom150);
zoomMenu->addAction(QIcon(":/images/zoomin.png"),tr("200%"));
zoomMenu->addAction(QIcon(":/images/services.png"),tr("400%"));
QToolBar *toolBar = addToolBar(tr("工具栏"));//右击可以关闭打开该工具栏
toolBar->addAction(openAction);
toolBar->addAction(moveAction);
toolBar->addAction(zoomMenu->menuAction());
aa=new QWidget;
this->setCentralWidget(aa);
label=new QLabel(tr("I am hhahahah"),aa);}
MainWindow::~MainWindow()
{
}
void MainWindow::link()
{
config *dialog=new config;
dialog->setModal(true);//设置对话框模式
dialog->setWindowFlags(Qt::WindowTitleHint);//将右上角的?按钮去掉,只有关闭按钮
dialog->show();
}
void MainWindow::openwindows()
{
dialog=new open; dialog->setModal(true);//设置对话框模式
dialog->setWindowFlags(Qt::WindowTitleHint);//将右上角的?按钮去掉,只有关闭按钮
dialog->show();
}
//创建image、runreport布局
void MainWindow::createDockWindows()
{
dock = new QDockWidget(tr("showImage"), this);
dock->setAllowedAreas(Qt::TopDockWidgetArea | Qt::BottomDockWidgetArea);
//textEdit=new QTextEdit;
//dock->setWidget(textEdit);
addDockWidget(Qt::TopDockWidgetArea, dock);
tools->addAction(dock->toggleViewAction());//将showImage页面加到菜单工具下
dock = new QDockWidget(tr("runReport"), this);
tabWidget = new QTabWidget;
tabWidget->addTab(new ATab,tr("动作信息"));
tabWidget->addTab(new BTab,tr("程序运行信息"));
dock->setWidget(tabWidget);
addDockWidget(Qt::BottomDockWidgetArea, dock);
tools->addAction(dock->toggleViewAction());
//connect(customerList, SIGNAL(currentTextChanged(QString)),
//this, SLOT(insertCustomer(QString)));
//connect(paragraphsList, SIGNAL(currentTextChanged(QString)),
// this, SLOT(addParagraph(QString)));
}
ATab::ATab(QWidget *parent):QWidget(parent)
{
BorderLayout *layout = new BorderLayout; // 手动编写的borderlayout类
this->setLayout(layout);
QStringList heardData=(QStringList()<<tr("序号")<<tr("保护名称")<<tr("动作时间")<<tr("内容")<<tr("动作相别")<<tr("是否确认")<<tr("类型"));
/*QStandardItemModel *model=new QStandardItemModel;
model->setHorizontalHeaderLabels(heardData);
table=new QTableView(this);
table->setGeometry(0,0,this->size().width(),this->height()/2);
table->setModel(model);
layout->addWidget(table, BorderLayout::Center);*/
tableWidget=new QTableWidget(this);
tableWidget->setColumnCount(heardData.length());
//tableWidget->setRowCount(5);
tableWidget->setHorizontalHeaderLabels(heardData);
tableWidget->insertRow(0);
tableWidget->setItem(0,0,new QTableWidgetItem(QString("aaaaaa")));
layout->addWidget(tableWidget, BorderLayout::Center);
}
BTab::BTab(QWidget *parent):QWidget(parent)
{
QLabel *bLabel=new QLabel(tr("I am BTab"),this);
}
//mainwindow.h#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QtGui/QMainWindow>
#include <QComboBox>
#include <QLabel>
#include <QGroupBox>
class QAction;
class QTextEdit;
class QTabWidget;
class QTableView;
class QTableWidget;
class open;class MainWindow : public QMainWindow
{
Q_OBJECT
public:
MainWindow(QWidget *parent=0);
~MainWindow();
void createDockWindows();
QLabel* label;private slots:
void openwindows();
void link();
private:
QWidget* aa;
QAction *openAction;
QAction *closeAction;
QAction *configAction;
QAction *exitAction;
QAction *toolsAction;
QAction *runrptAction;
QAction *refreshAction;
QAction *aboutAction;
QAction *moveAction;
QMenu *zoomMenu;
QMenu *tools;
QGroupBox *typeGroup;
QTextEdit *textEdit;
QLabel *imageLabel;
QTabWidget *tabWidget;
QDockWidget *dock;
MainWindow* p;
protected:
open* dialog;
};
class ATab:public QWidget
{
Q_OBJECT
public:
ATab(QWidget *parent=0);
private:
QTableView *table;
QTableWidget *tableWidget;
};
class BTab:public QWidget
{
Q_OBJECT
public:
BTab(QWidget *parent=0);
private:
QTableView *table;
};
#endif // MAINWINDOW_H
//open.cpp#include "open.h"
#include "ui_open.h"
#include <QMessageBox>
#include <QSqlDatabase>
#include <QSqlError>
#include <QDomDocument>
#include <QFile>
#include "global.h"
#include <QSqlQuery>
#include "mainwindow.h"
#include <QTableWidget>
#include <QTableWidgetItem>
#include <QDockWidget>
open::open(QWidget *parent) :
QDialog(parent),
ui(new Ui::open)
{
ui->setupUi(this);
this->initlist();
connect(ui->okButton,SIGNAL(clicked()), this, SLOT(createConnection()));
connect(ui->cancelButton,SIGNAL(clicked()),this,SLOT(close()));
}
open::~open()
{
delete ui;
}
void open::changeEvent(QEvent *e)
{
QDialog::changeEvent(e);
switch (e->type()) {
case QEvent::LanguageChange:
ui->retranslateUi(this);
break;
default:
break;
}
}
void open::initlist(){
QDomDocument doc;
QFile file(":/linkconfig/ifisconfig.xml");
file.open(QIODevice::ReadOnly);
doc.setContent(file.readAll());
file.close();
QDomNode root = doc.documentElement();
if (!root.isNull())
{
QDomNodeList nodelist = root.childNodes();
for(int i=0;i<nodelist.count();i++)
{
QDomNode node=nodelist.at(i);
QDomAttr name=node.toElement().attributeNode("name");
/*QDomNodeList leaflist = node.childNodes();
ip=leaflist.at(0).toElement().text();
database=leaflist.at(1).toElement().text();
port=leaflist.at(2).toElement().text();
qWarning((const char*)ip.toLatin1().data());//QString转化为const char*类型
*/
ui->listWidget->addItem(QString(name.value()));
}
}
}
bool open::createConnection(){
if(ui->listWidget->selectedItems().at(0)!=NULL){
QString selecteditem=ui->listWidget->selectedItems().at(0)->text();
searchXml(&selecteditem);
}
QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");
db.setHostName(ip);
db.setPort(port.toInt());
db.setDatabaseName(database);
db.setUserName("test");
db.setPassword("test");
ok = db.open(); // 尝试连接数据库
if(ok) //连接数据库成功
{
this->close();
ownmain->label->setText(tr("hahahahahah"));
}
else // 打开数据库失败
{
QString message="cannot open database.Reason:";
message.append(db.lastError().databaseText());
QMessageBox::critical(NULL,"open database",message,QMessageBox::Yes,QMessageBox::Yes);
}
return ok;
}
//获得所选中的ip、port、database
void open::searchXml(QString *selecteditem){
QDomDocument doc;
QFile file(":/linkconfig/ifisconfig.xml");
file.open(QIODevice::ReadOnly);
doc.setContent(file.readAll());
file.close();
QDomNode root = doc.documentElement();
if (!root.isNull())
{
QDomNodeList nodelist = root.childNodes();
for(int i=0;i<nodelist.count();i++)
{
QDomNode node=nodelist.at(i);
QDomAttr name=node.toElement().attributeNode("name");
if(name.value()==selecteditem){
QDomNodeList leaflist = node.childNodes();
ip=leaflist.at(0).toElement().text();
database=leaflist.at(1).toElement().text();
port=leaflist.at(2).toElement().text();
}
}
}
}
//open.h
#ifndef OPEN_H
#define OPEN_H
#include <QDialog>
namespace Ui {
class open;
}
class MainWindow;
class open : public QDialog {
Q_OBJECT
public:
open(QWidget* parent=0);
~open();
private slots:
bool createConnection();
protected:
void changeEvent(QEvent *e);
void initlist();
void searchXml(QString *item);
private:
Ui::open *ui;
MainWindow* ownmain;};
#endif // OPEN_H