• 8809阅读
  • 11回复

请问为何程序能通过编译,不能运行呢?[问题已解决] [复制链接]

上一主题 下一主题
离线yanzhongsan
 

只看楼主 倒序阅读 楼主  发表于: 2008-05-31
— 本帖被 XChinux 执行加亮操作(2008-06-04) —
各位好,我是菜鸟
我的程序能通过编译,没有任何警告,但是无法运行,我用的kdevelop 3.5.2,qt4.4.0,操作系统是suse 10.3,在Kdevelop中一点击运行就会提示:QWidget: Cannot create a QWidget when no GUI is being used
问题出在那里呢?(为什么不支持tar文件?郁闷)

解决办法:出现问题是由于我不经意将QApplication app(argc, argv);写成了QCoreApplication app(argc, argv);  将QCoreApplication app(argc, argv);改成QApplication app(argc, argv);就可以了,多谢各位的帮助
[ 此贴被yanzhongsan在2008-06-04 10:02重新编辑 ]
yanzhongsan@gmail.com
MSN:yanzhongsan@hotmail.com
QQ:53513754
离线XChinux

只看该作者 1楼 发表于: 2008-05-31
帖下源代码
二笔 openSUSE Vim N9 BB10 XChinux@163.com 网易博客 腾讯微博
承接C++/Qt、Qt UI界面、PHP及预算报销系统开发业务
离线focusoncdr

只看该作者 2楼 发表于: 2008-05-31
试试下面的方法:
在QMake管理器里右键点击工程选择”工程选项“-》”配置“
QT4 Libraries确保"Gui"选中
“确定”,退出
再重新编译试试
离线yanzhongsan

只看该作者 3楼 发表于: 2008-06-02
1楼:源代码我想上传,可这里不支持tar压缩文件,很郁闷,我再想下办法……
2楼:那个GUI是选上了的

多谢了
yanzhongsan@gmail.com
MSN:yanzhongsan@hotmail.com
QQ:53513754
离线lzian
只看该作者 4楼 发表于: 2008-06-02
让你贴一部分,又不是上传,
贴关键的
离线yanzhongsan

只看该作者 5楼 发表于: 2008-06-03
//这是main.cpp文件
#include <QtGui>

#include "builtin.h"

int main(int argc, char *argv[])
{
    QCoreApplication app(argc, argv);
    QTextCodec::setCodecForTr(QTextCodec::codecForName("gb18030"));
   
    CBuiltinDlg dlg;
    return dlg.exec();
}
yanzhongsan@gmail.com
MSN:yanzhongsan@hotmail.com
QQ:53513754
离线yanzhongsan

只看该作者 6楼 发表于: 2008-06-03
//这是自己建的一个类
#include <QtGui>

#include "builtin.h"

CBuiltinDlg::CBuiltinDlg(QWidget * parent):QDialog(parent)
{
    displayTextEdit = new QTextEdit(tr("Qt的标准通用对话框"));
   
    QGridLayout * gridLayout = new QGridLayout;
    colorPushBtn    = new QPushButton(tr("颜色对话框"));
    errorPushBtn    = new QPushButton(tr("错误对话框"));
    filePushBtn    = new QPushButton(tr("文件对话框"));
    fontPushBtn    = new QPushButton(tr("字体对话框"));
    inputPushBtn    = new QPushButton(tr("输入对话框"));
    pagePushBtn    = new QPushButton(tr("页设置对话框"));
    progressPushBtn    = new QPushButton(tr("进度对话框"));
    printPushBtn    = new QPushButton(tr("打印对话框"));
   
    gridLayout->addWidget(colorPushBtn,0,0,1,1);
    gridLayout->addWidget(errorPushBtn,0,1,1,1);
    gridLayout->addWidget(filePushBtn,0,2,1,1);
    gridLayout->addWidget(fontPushBtn,1,0,1,1);
    gridLayout->addWidget(inputPushBtn,1,1,1,1);
    gridLayout->addWidget(pagePushBtn,1,2,1,1);
    gridLayout->addWidget(progressPushBtn,2,0,1,1);
    gridLayout->addWidget(printPushBtn,2,1,1,1);
    gridLayout->addWidget(displayTextEdit,3,0,3,3);
   
    setLayout(gridLayout);
   
    connect(colorPushBtn,SIGNAL(clicked()),this,SLOT(doPushBtn()));
    connect(errorPushBtn,SIGNAL(clicked()),this,SLOT(doPushBtn()));
    connect(filePushBtn,SIGNAL(clicked()),this,SLOT(doPushBtn()));
    connect(fontPushBtn,SIGNAL(clicked()),this,SLOT(doPushBtn()));
    connect(inputPushBtn,SIGNAL(clicked()),this,SLOT(doPushBtn()));
    connect(pagePushBtn,SIGNAL(clicked()),this,SLOT(doPushBtn()));
    connect(progressPushBtn,SIGNAL(clicked()),this,SLOT(doPushBtn()));
    connect(printPushBtn,SIGNAL(clicked()),this,SLOT(doPushBtn()));
   
    setWindowTitle(tr("内建对话框"));
    resize(400,300);
}

void CBuiltinDlg::doPushBtn()
{
    QPushButton * btn = qobject_cast<QPushButton *>(sender());
    if (btn == colorPushBtn)
    {//颜色对话框
        QPalette palette = displayTextEdit->palette();
        const QColor & color = QColorDialog::getColor(palette.color(QPalette::Base),this);
        if (color.isValid())
        {
            palette.setColor(QPalette::Base,color);
            displayTextEdit->setPalette(palette);
        }
    }
    else if (btn == errorPushBtn)
    {//错误消息框
        QErrorMessage box(this);
        box.setWindowTitle(tr("错误消息框"));
        box.showMessage(tr("错误消息框实例xx"));
        box.showMessage(tr("错误消息框实例xx"));
        box.showMessage(tr("错误消息框实例xx"));
        box.showMessage(tr("错误消息框实例yy"));
        box.showMessage(tr("错误消息框实例zz"));
        box.exec();
    }
    else if (btn == filePushBtn)
    {//文件对话框
        QString fileName = QFileDialog::getOpenFileName(
                        this,
                        tr("打开文件"),
                        "/usr/local/Trolltech",
                        tr("任何文件(*.*)"
                        ";;文本文件(*.txt)"
                        ";;XML文件(*.xml)"));
        displayTextEdit->setText(fileName);
    }
    else if (btn == fontPushBtn)
    {//字体对话框
        bool ok=false;
        const QFont& font = QFontDialog::getFont(
                        &ok,
                        displayTextEdit->font(),
                        this,
                        tr("字体对话框"));
        if (true==ok)
        {//如果<确定>,设置字体
            displayTextEdit->setFont(font);
        }
    }
    else if (btn == inputPushBtn)
    {//输入对话框
        bool ok=false;
        QString text = QInputDialog::getText(
                        this,
                        tr("输入对话框"),
                        tr("输入文本"),
                        QLineEdit::Normal,
                        QDir::home().dirName(),
                        &ok);
        if (true==ok && !text.isEmpty())
            displayTextEdit->setText(text);
    }
    else if (btn == pagePushBtn)
    {//页设置对话框
        QPrinter printer;
        QPageSetupDialog dlg(&printer,this);
        dlg.setWindowTitle(tr("页设置对话框"));
        if (dlg.exec() == QDialog::Accepted)
        {
            //进行下一步处理
        }
    }
    else if (btn == progressPushBtn)
    {//进度对话框
        QProgressDialog progress(tr("正在复制文件..."),
                        tr("取消"),
                        0,
                        10000,
                        this);
        progress.setWindowModality(Qt::WindowModal);
        progress.setWindowTitle(tr("进度对话框"));
        progress.show();
       
        for (int i=0;i<10000;i++)
        {
            progress.setValue(i);
            qApp->processEvents();
            if (progress.wasCanceled())
                break;
            qDebug() << i;
        }
        progress.setValue(10000);
    }
    else if (btn == printPushBtn)
    {//打印对话框
        QPrinter printer;
        QPrintDialog dlg(&printer,this);
        dlg.setWindowTitle(tr("打印对话框"));
        if (dlg.exec() == QDialog::Accepted)
        {
            //进行下一步处理
        }
    }
}
yanzhongsan@gmail.com
MSN:yanzhongsan@hotmail.com
QQ:53513754
离线yanzhongsan

只看该作者 7楼 发表于: 2008-06-03
//这是另外一个头文件
#ifndef built_in_h
#define built_in_h

#include <QtGui>

class QTextEdit;
class QPushButton;
class QDialog;

class CBuiltinDlg : public QDialog
{
    Q_OBJECT
public:
    CBuiltinDlg(QWidget * = 0);
    virtual ~CBuiltinDlg() {}
private:
    QTextEdit * displayTextEdit;
    QPushButton * colorPushBtn;
    QPushButton * errorPushBtn;
    QPushButton * filePushBtn;
    QPushButton * fontPushBtn;
    QPushButton * inputPushBtn;
    QPushButton * pagePushBtn;
    QPushButton * progressPushBtn;
    QPushButton * printPushBtn;
private slots:
    void doPushBtn();
};

#endif
yanzhongsan@gmail.com
MSN:yanzhongsan@hotmail.com
QQ:53513754
离线XChinux

只看该作者 8楼 发表于: 2008-06-03
引用第5楼yanzhongsan于2008-06-03 09:08发表的  :
//这是main.cpp文件
#include <QtGui>
#include "builtin.h"
.......


应该是

CBuiltinDlg dlg;
QObject::connect(&app, SIGNAL(lastWindowClosed()), &app, SLOT(quit()));
dlg.exec();
return app.exec();
二笔 openSUSE Vim N9 BB10 XChinux@163.com 网易博客 腾讯微博
承接C++/Qt、Qt UI界面、PHP及预算报销系统开发业务
离线yanzhongsan

只看该作者 9楼 发表于: 2008-06-03
8楼:修改成
CBuiltinDlg dlg;
QObject::connect(&app, SIGNAL(lastWindowClosed()), &app, SLOT(quit()));
dlg.exec();
return app.exec();还是没有解决问题……

不论我用命令行模式编译(qmake -project ,qmake ,make)还是kdevelop下都是相同的结果
[ 此贴被yanzhongsan在2008-06-03 14:32重新编辑 ]
yanzhongsan@gmail.com
MSN:yanzhongsan@hotmail.com
QQ:53513754
离线lzian
只看该作者 10楼 发表于: 2008-06-03
main.cpp中改成下面的:
    QApplication app(argc, argv);
    QTextCodec::setCodecForTr(QTextCodec::codecForName("gb18030"));   
    CBuiltinDlg dlg;
    dlg.show();
    return app.exec();
离线yanzhongsan

只看该作者 11楼 发表于: 2008-06-04
谢谢各位的帮忙,问题昨晚已经找到了
就像9楼的朋友说的,把QCoreApplication app(argc, argv);修改成QApplication app(argc, argv);就可以了……
yanzhongsan@gmail.com
MSN:yanzhongsan@hotmail.com
QQ:53513754
快速回复
限100 字节
 
上一个 下一个