• 4747阅读
  • 6回复

Linux下程序编译链接没错,但运行不了 [复制链接]

上一主题 下一主题
离线caichao07
 

只看楼主 倒序阅读 楼主  发表于: 2009-12-20
EditWindow.cpp
#include "EditWindow.h"
#include <QtGui/QApplication>
#include <QtGui/QTextEdit>
#include <QtGui/QAction>
#include <QtGui/QAction>
#include <QtGui/QFileDialog>
#include <QtGui/QMessageBox>
#include <QtGui/QMenu>
#include <QtGui/QMenuBar>
#include <QtGui/QToolBar>
#include <QtCore/QFile>
#include <QtCore/QString>
#include <QtCore/QTextStream>
#include <QtCore/QIODevice>
#include <QtCore/QTextCodec>

EditWindow :: EditWindow()
{
setWindowTitle(tr("EditWindow"));
text=new QTextEdit(this);
setCentralWidget(text);

createActions();
createMenus();
createToolBars();
}

void EditWindow :: createActions()
{
fileOpenAction=new QAction(tr("Open"), this);
fileOpenAction->setShortcut(tr("Ctrl+O"));
fileOpenAction->setStatusTip(tr("open a file"));
connect(fileOpenAction, SIGNAL(triggered()), this, SLOT(slotOpenFile()));

fileNewAction=new QAction(tr("New"), this);
fileNewAction->setShortcut(tr("Ctrl+N"));
fileNewAction->setStatusTip(tr("new file"));
connect(fileNewAction, SIGNAL(triggered()), this, SLOT(slotNewFile() ) );

fileSaveAction=new QAction(tr("Save"), this);
fileSaveAction->setShortcut(tr("Ctrl+S"));
fileSaveAction->setStatusTip(tr("save file"));
connect(fileSaveAction, SIGNAL(activated()), this, SLOT(slotSaveFile()));

exitAction=new QAction(tr("Exit"), this);
exitAction->setShortcut(tr("Ctrl+Q"));
exitAction->setStatusTip(tr("exit"));
connect(exitAction, SIGNAL(triggered()), this, SLOT(slotClose()) );

cutAction=new QAction(tr("Cut"), this);
cutAction->setShortcut(tr("Ctrl+C"));
copyAction->setStatusTip(tr("copy to clipboard"));
connect(copyAction, SIGNAL(triggered()), text, SLOT(slotCopy()));

pasteAction=new QAction(tr("Paste"), this);
pasteAction->setShortcut(tr("Ctrl+V"));
pasteAction->setStatusTip(tr("paste clipboard to selection"));
connect(pasteAction, SIGNAL(triggered()), text, SLOT(slotPaste()));

aboutAction=new QAction(tr("About"), this);
connect(aboutAction, SIGNAL(triggered()), this, SLOT(slotAbout()));

}

void EditWindow :: createMenus()
{
QTextCodec *codec = QTextCodec::codecForName("UTF-8");

fileMenu=menuBar()->addMenu(codec->toUnicode("文件"));
fileMenu->addAction(fileNewAction);
fileMenu->addAction(fileOpenAction);
fileMenu->addAction(fileSaveAction);
fileMenu->addAction(exitAction);

editMenu=menuBar()->addMenu(codec->toUnicode("编辑"));
editMenu->addAction(copyAction);
editMenu->addAction(cutAction);
editMenu->addAction(pasteAction);

aboutMenu=menuBar()->addMenu(codec->toUnicode("帮助"));
aboutMenu->addAction(aboutAction);
}

void EditWindow :: createToolBars()
{
fileToolBar=addToolBar("File");
fileToolBar->addAction(fileNewAction);
fileToolBar->addAction(fileOpenAction);
fileToolBar->addAction(fileSaveAction);

editToolBar=addToolBar("Edit");
editToolBar->addAction(copyAction);
editToolBar->addAction(cutAction);
editToolBar->addAction(pasteAction);
}

void EditWindow :: slotNewFile()
{
EditWindow *newWin=new EditWindow;
newWin->show();
}

void EditWindow :: loadFile(const QString &fileName)
{
// printf("file name: %s\n", fileName.data());
QFile file(fileName);
if(file.open( QIODevice :: ReadOnly | QIODevice :: Text ))
{
QTextStream textStream(&file);
while(!textStream.atEnd())
{
text->append(textStream.readLine());
printf("read line \n");
}
printf("end\n");
}
}

void EditWindow :: slotOpenFile()
{
QString fileName= QFileDialog :: getOpenFileName(this);
if(!fileName.isEmpty())
{
if(text->document()->isEmpty())
loadFile(fileName);
else
{
EditWindow *newWin=new EditWindow;
newWin->show();
newWin->loadFile(fileName);
}
}
}

void EditWindow :: fileSave(const QString &fileName)
{
QFile file(fileName);
if (!file.open(QIODevice::WriteOnly | QIODevice::Text)) {
QMessageBox::warning(this, tr("Editor"),
tr("Cannot write file %1:\n%2.")
.arg(file.fileName())
.arg(file.errorString()));
}
QTextStream out(&file);
QApplication::setOverrideCursor(Qt::WaitCursor);
out << text->toPlainText();
QApplication::restoreOverrideCursor();
}

void EditWindow :: slotSaveFile()
{
QString fn = QFileDialog::getSaveFileName(this, tr("Save as..."),
QString(), tr("TXT files (*.txt);;C/CPP files (*.c *.cpp);;All Files (*)"));
if (!fn.isEmpty())
{
if (! (fn.endsWith(".txt", Qt::CaseInsensitive) || fn.endsWith(".cpp", Qt::CaseInsensitive) || fn.endsWith(".c", Qt::CaseInsensitive) ) )
fn += ".txt"; // default
fileSave(fn);
}
}

void EditWindow :: slotCopy()
{
text->copy();
}

void EditWindow :: slotPaste()
{
text->paste();
}

void EditWindow :: slotCut()
{
text->cut();
}

void EditWindow :: slotAbout()
{
QMessageBox::about(this, tr("About Editor"),
tr("<h2>Editor 1.1</h2>"
"<p>Copyright © 2009 Software Inc."
"<p>Editor is a small application that demonstrates "
));
}

void EditWindow :: slotClose()
{
}

EditWindow.h
#include <QtGui/QMainWindow>
#include <QtGui/QMenu>
#include <QtGui/QToolBar>
#include <QtGui/QAction>
#include <QtGui/QTextEdit>
#include <QtCore/QString>

class EditWindow : public QMainWindow
{
Q_OBJECT
public:
EditWindow();
void createMenus();
void createActions();
void createToolBars();
void loadFile(const QString &str);
void fileSave(const QString &fileName);

public slots:
void slotNewFile();
void slotOpenFile();
void slotSaveFile();
void slotClose();
void slotCopy();
void slotCut();
void slotPaste();
void slotAbout();

private:
QMenu *fileMenu;
QMenu *editMenu;
QMenu *aboutMenu;
QToolBar *fileToolBar;
QToolBar *editToolBar;
QAction *fileOpenAction;
QAction *fileNewAction;
QAction *fileSaveAction;
QAction *exitAction;
QAction *copyAction;
QAction *cutAction;
QAction *pasteAction;
QAction *aboutAction;

QTextEdit *text;
};

main.cpp
#include <QtGui/QApplication>
#include "EditWindow.h"

int main(int argc, char **argv)
{
QApplication app(argc, argv);
EditWindow EditWin;
EditWin.show();
return app.exec();
}
离线caichao07

只看该作者 1楼 发表于: 2009-12-20
以下是编译链接的情况:
[caichao@localhost Editor]$ qmake -project
[caichao@localhost Editor]$ qmake
[caichao@localhost Editor]$ make
g++ -c -pipe -O2 -Wall -W -D_REENTRANT -DQT_NO_DEBUG -DQT_GUI_LIB -DQT_CORE_LIB -DQT_SHARED -I/usr/local/Trolltech/Qt-4.3.1/mkspecs/linux-g++ -I. -I/usr/local/Trolltech/Qt-4.3.1/include/QtCore -I/usr/local/Trolltech/Qt-4.3.1/include/QtCore -I/usr/local/Trolltech/Qt-4.3.1/include/QtGui -I/usr/local/Trolltech/Qt-4.3.1/include/QtGui -I/usr/local/Trolltech/Qt-4.3.1/include -I. -I. -I. -o EditWindow.o EditWindow.cpp
g++ -c -pipe -O2 -Wall -W -D_REENTRANT -DQT_NO_DEBUG -DQT_GUI_LIB -DQT_CORE_LIB -DQT_SHARED -I/usr/local/Trolltech/Qt-4.3.1/mkspecs/linux-g++ -I. -I/usr/local/Trolltech/Qt-4.3.1/include/QtCore -I/usr/local/Trolltech/Qt-4.3.1/include/QtCore -I/usr/local/Trolltech/Qt-4.3.1/include/QtGui -I/usr/local/Trolltech/Qt-4.3.1/include/QtGui -I/usr/local/Trolltech/Qt-4.3.1/include -I. -I. -I. -o main.o main.cpp
/usr/local/Trolltech/Qt-4.3.1/bin/moc -DQT_NO_DEBUG -DQT_GUI_LIB -DQT_CORE_LIB -DQT_SHARED -I/usr/local/Trolltech/Qt-4.3.1/mkspecs/linux-g++ -I. -I/usr/local/Trolltech/Qt-4.3.1/include/QtCore -I/usr/local/Trolltech/Qt-4.3.1/include/QtCore -I/usr/local/Trolltech/Qt-4.3.1/include/QtGui -I/usr/local/Trolltech/Qt-4.3.1/include/QtGui -I/usr/local/Trolltech/Qt-4.3.1/include -I. -I. -I. EditWindow.h -o moc_EditWindow.cpp
g++ -c -pipe -O2 -Wall -W -D_REENTRANT -DQT_NO_DEBUG -DQT_GUI_LIB -DQT_CORE_LIB -DQT_SHARED -I/usr/local/Trolltech/Qt-4.3.1/mkspecs/linux-g++ -I. -I/usr/local/Trolltech/Qt-4.3.1/include/QtCore -I/usr/local/Trolltech/Qt-4.3.1/include/QtCore -I/usr/local/Trolltech/Qt-4.3.1/include/QtGui -I/usr/local/Trolltech/Qt-4.3.1/include/QtGui -I/usr/local/Trolltech/Qt-4.3.1/include -I. -I. -I. -o moc_EditWindow.o moc_EditWindow.cpp
g++ -Wl,-rpath,/usr/local/Trolltech/Qt-4.3.1/lib -o Editor EditWindow.o main.o moc_EditWindow.o    -L/usr/local/Trolltech/Qt-4.3.1/lib -lQtGui -L/usr/local/Trolltech/Qt-4.3.1/lib -L/usr/X11R6/lib -lpng -lSM -lICE -pthread -pthread -lXi -lXrender -lXrandr -lXcursor -lXinerama -lfreetype -lfontconfig -lXext -lX11 -lQtCore -lz -lm -pthread -lgthread-2.0 -lglib-2.0 -lrt -ldl -lpthread

请高手指教!!!
离线pinkfrog
只看该作者 2楼 发表于: 2009-12-20
出啥错
离线rqzrqh

只看该作者 3楼 发表于: 2009-12-20
错呢 ???
离线caichao07

只看该作者 4楼 发表于: 2009-12-20
就是因为编译链接没错才郁闷啊,运行了就出错啦

请高手指教!!!
离线rqzrqh

只看该作者 5楼 发表于: 2009-12-21
运行出错你把正确的编译信息贴上来干嘛
离线snailbing

只看该作者 6楼 发表于: 2009-12-21
LZ,把出错信息贴出来,不然根本就不知道是出什么错了
快速回复
限100 字节
 
上一个 下一个