• 8162阅读
  • 14回复

Qt运行问题 [复制链接]

上一主题 下一主题
离线jinyxin
 
只看楼主 倒序阅读 楼主  发表于: 2008-08-23
— 本帖被 XChinux 执行加亮操作(2008-08-25) —
我用Qt3编译程序成功,但是运行的时候就直接退出啦,执行./xxx 之后,什么也没有,是什么原因?谢谢
离线jinyxin
只看该作者 1楼 发表于: 2008-08-23
为什么没人回答?
离线jinyxin
只看该作者 2楼 发表于: 2008-08-23
版主能帮看看吗?
离线jinyxin
只看该作者 3楼 发表于: 2008-08-23
是没人知道还是太简单不屑于回答
大哥们,说几句挖,第一次提问没人理。
离线XChinux

只看该作者 4楼 发表于: 2008-08-25
要帖上相关源代码,否则别人无法知道到底原因在哪里。
二笔 openSUSE Vim N9 BB10 XChinux@163.com 网易博客 腾讯微博
承接C++/Qt、Qt UI界面、PHP及预算报销系统开发业务
离线jinyxin
只看该作者 5楼 发表于: 2008-08-26
myMainWindow.h文件
#include <qmainwindow.h>
#include <qwidget.h>
#include <qmultilineedit.h>
#include <qpopupmenu.h>
#include <qtoolbar.h>
#include <qpixmap.h>
#include <qaction.h>
#include <qstring.h>
                                                                               
class myMainWindow:public QMainWindow
{
  Q_OBJECT
public:
  myMainWindow(QWidget *parent=0,const char *name =0);
public slots:
  void newFile();
  void open();
  void open(const char *fileName);
  void save();
  void saveAs();
  void undo();
  void redo();
  void cut();
  void copy();
  void paste();
  void del();
  void selectAll();
  void font();
  void aboutNotePad();
private:
  QPopupMenu *file;
  QPopupMenu *edit;
  QPopupMenu *option;
  QPopupMenu *help;
  QToolBar *toolBar;
  QPixmap openIcon;
  QPixmap saveIcon;
  QMultiLineEdit *centralWidget;
  QAction *fileOpenAction;
  QAction *fileNewAction;
  QAction *fileSaveAction;
  QAction *fileSaveAsAction;
  QAction *fileQuitAction;
  QAction *editUndoAction;
  QAction *editRedoAction;
  QAction *editCutAction;
  QAction *editCopyAction;
  QAction *editPasteAction;
  QAction *editDelAction;
  QAction *editSelectAllAction;
  QAction *optionFontAction;
  QAction *aboutAction;
  QString filename;
};


myMainWindow.cpp文件
#include <qfont.h>
#include <qfontdialog.h>
#include <qstring.h>
#include <qfiledialog.h>
#include <qfile.h>
#include <qtextstream.h>
#include <qmessagebox.h>
#include <qmenubar.h>
#include <qstatusbar.h>
#include <qapplication.h>
#include "fileopen.xpm"
#include "filesave.xpm"

#include "myMainWindow.h"

myMainWindow::myMainWindow(QWidget *parent,const char *name)
        :QMainWindow(parent,name)
{
  openIcon=QPixmap(fileopen);
  saveIcon=QPixmap(filesave);

  file=new QPopupMenu(this);
  edit=new QPopupMenu(this);
  option=new QPopupMenu(this);
  help=new QPopupMenu(this);
 
  fileNewAction = new QAction("New File",openIcon,"&New", CTRL+Key_N,file,"new");
  connect(fileNewAction,SIGNAL(activated()),this,SLOT(newFile()));
 
  fileOpenAction=new QAction("Open File",saveIcon,"&Open",CTRL+Key_O,file,"open");
  connect(fileOpenAction,SIGNAL(activated()),this,SLOT(open()));
 
  fileSaveAction=new QAction("Save File","&Save",CTRL+Key_S,file,"save");
  connect(fileSaveAction,SIGNAL(activated()),this,SLOT(save()));

  fileSaveAsAction=new QAction("SaveAs File","Save&As",SHIFT+Key_S,file,"saveAs");
  connect(fileSaveAsAction,SIGNAL(activated()),this,SLOT(saveAs()));

  fileQuitAction=new QAction("Quit","&Quit",ALT+Key_Q,file,"quit");
  QObject::connect(fileQuitAction,SIGNAL(activated()),qApp,SLOT(quit()));

  editUndoAction=new QAction("Undo","&Undo",CTRL+Key_Z,edit,"undo");
  connect(editUndoAction,SIGNAL(activated()),this,SLOT(undo()));
 
  editRedoAction=new QAction("Redo","&Redo",CTRL+Key_Y,edit,"redo");
  connect(editRedoAction,SIGNAL(activated()),this,SLOT(redo()));
 
  editCutAction=new QAction("Cut","&Cut",CTRL+Key_X,edit,"cut");
  connect(editCutAction,SIGNAL(activated()),this,SLOT(cut()));

  editCopyAction=new QAction("Copy","&Copy",CTRL+Key_C,edit,"copy");
  connect(editCopyAction,SIGNAL(activated()),this,SLOT(copy()));

  editPasteAction=new QAction("Paste","&Paste",CTRL+Key_V,edit,"paste");
  connect(editPasteAction,SIGNAL(activated()),this,SLOT(paste()));

  editSelectAllAction=new QAction("SelectAll","Select&All",CTRL+Key_A,edit,"selectAll");
  connect(editSelectAllAction,SIGNAL(activated()),this,SLOT(selectAll()));
 
  optionFontAction=new QAction("Font","&Font",CTRL+SHIFT+Key_F,option,"font");
  connect(optionFontAction,SIGNAL(activated()),this,SLOT(font()));

  aboutAction=new QAction("AboutNotePad","&AboutNotePad",SHIFT+Key_F1,help,"aboutNotePad");
  connect(aboutAction,SIGNAL(activated()),this,SLOT(aboutNotePad()));

  toolBar=new QToolBar(this);
  fileOpenAction->addTo(toolBar);
  fileSaveAction->addTo(toolBar);

  menuBar()->insertItem("&File",file);
  menuBar()->insertItem("&Edit",edit);
  menuBar()->insertItem("&Option",option);
  menuBar()->insertItem("&Help",help);

  fileNewAction->addTo(file);
  fileOpenAction->addTo(file);
  fileSaveAction->addTo(file);
  fileSaveAsAction->addTo(file);
  file->insertSeparator();
  fileQuitAction->addTo(file);

  editUndoAction->addTo(edit);
  editRedoAction->addTo(edit);
  edit->insertSeparator();
  editCutAction->addTo(edit);
  editCopyAction->addTo(edit);
  editPasteAction->addTo(edit);
  editDelAction->addTo(edit);
  edit->insertSeparator();
  editSelectAllAction->addTo(edit);
 
  optionFontAction->addTo(option);

  aboutAction->addTo(help);

  centralWidget=new QMultiLineEdit(this,"editor");
  centralWidget->setFocus();
  setCentralWidget(centralWidget);
}

void myMainWindow::newFile()
{
    myMainWindow *newWindow = new myMainWindow;
    newWindow->setCaption("No Caption--NotePad");
    newWindow->show();
}

void myMainWindow::open()
{
    QString fn=QFileDialog::getOpenFileName(QString::null,QString::null,this);
    if (!fn.isEmpty())
    open(fn);
    else
    statusBar()->message( "Loading aborted", 2000 );
}

void myMainWindow::open( const char *fileName )
{
    QFile f(fileName);
    if (!f.open(IO_ReadOnly))
    return;

    centralWidget->clear();

    QTextStream t(&f);
    while (t.atEnd()==0)
  {
    QString s = t.readLine();
    centralWidget->append( s );
    }
    f.close();
    centralWidget->update();
    setCaption( fileName );
}

void myMainWindow::save()
{
    if (filename.isEmpty())
    {
    saveAs();
    return;
    }

    QString text = centralWidget->text();
    QFile f(filename);
    if (!f.open(IO_WriteOnly))
    {
    statusBar()->message( QString("Could not write to %1").arg(filename), 2000 );
    return;
    }

    QTextStream t( &f );
    t << text;
    f.close();

    centralWidget->setEdited( FALSE );
    setCaption( filename );

    statusBar()->message( QString( "File %1 saved" ).arg( filename ), 2000 );
}

void myMainWindow::saveAs()
{
    QString fn=QFileDialog::getSaveFileName(QString::null,QString::null,this );
    if (!fn.isEmpty())
    {
    filename = fn;
    save();
    }
    else
    statusBar()->message( "Saving aborted", 2000 );
    }
}

void myMainWindow::aboutNotePad()
{
    QMessageBox::about( this, "NotePad ","This NotePad carries out simple use");
}

void myMainWindow::undo()
{
}

void myMainWindow::redo()
{
}

void myMainWindow::copy()
{
}

void myMainWindow::cut()
{
}

void myMainWindow::paste()
{
}

void myMainWindow::del()
{
}

void myMainWindow::selectAll()
{
}

void myMainWindow::font()
{
  bool ok;
  QFont myFont=QFontDialog::getFont(&ok,QFont("Times",12));
  if(ok)
  {
    centralWidget->setFont(myFont);
  }
}

main.cpp文件
#include "myMainWindow.h"
#include <qapplication.h>
                                                                               
int main(int argc,char **argv)
{
  QApplication app(argc,argv);
  myMainWindow w;
  w.setGeometry(10,10,470,470);
  app.setMainWidget(&w);
  w.show();
  return app.exec();
}

刚学习Qt,想模仿着编个简单记事本程序,有些函数还没有完成,这段程序能编译通过,但就是运行没有弹出窗口,怎么回事?大家帮看看。谢谢!
为什么我能在QT3下可以编译通过,但QT2不行,凡用QFileDialog成员函数的地方都有问题,QFileDialog不是QT3新增加的类呀,怎么回事?
离线huangyi111
只看该作者 6楼 发表于: 2008-08-26
QT2我没用过,不过如果QFILEDialog是QT3新增加的类,当然QT2不能用啦~~
就回出错啦!!
至于为什么没有显示, 从你写的程序上看没什么问题,不知道你用什么命令编译的?还有你的.pro 文件是什么?
这个程序是用designer 设计的吗?如果不是,我建议你使用,毕竟使用designer,你也可以学习他的原码~~~~~~~~~~
离线jinyxin
只看该作者 7楼 发表于: 2008-08-26
我的.pro文件

TEMPLATE = app
INCLUDEPATH += .
                                                                               
# Input
HEADERS += myMainWindow.h
SOURCES += main.cpp myMainWindow.cpp

.pro是用qmake生成,步骤是qmake -project;qmake;make;执行./xxx  我用纯代码编写的,没用designer。QT2有QFileDialog这个类,但是编译有问题,为什么。
大家都帮看看
离线jinyxin
只看该作者 8楼 发表于: 2008-08-26
顶起来,大家帮看看。
离线huangyi111
只看该作者 9楼 发表于: 2008-08-26
用这个.pro看看

TEMPLATE=app
CONFIG= qt warn_on release
HEADERS= XXX.h
SOUCES= XXX.cpp
INTERFACES=

用这个看看行不,建议你用designer,然后提取原文件来看
离线huangyi111
只看该作者 10楼 发表于: 2008-08-26
编译出问题也说不清楚,有环境变量问题,我用的时候,qmake的版本也有问题,不同的版本提供的工具也有点区别
离线jinyxin
只看该作者 11楼 发表于: 2008-08-26
谢谢,我试试。我这个程序编译没问题,就是运行没有弹出窗口。
离线jinyxin
只看该作者 12楼 发表于: 2008-08-26
还是不行,大家再帮看看,什么问题?
离线浪漫天使
只看该作者 13楼 发表于: 2008-08-27
editDelAction  没有new出来  editDelAction 还是空的,所以下面这个 就会导致错误
  editDelAction->addTo(edit);
离线jinyxin
只看该作者 14楼 发表于: 2008-08-27
是这个问题 按楼上说的可以 谢谢
快速回复
限100 字节
 
上一个 下一个