Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум на CrossPlatform.RU _ Qt Общие вопросы _ на моем компе прога работает отлично, а на чужих вылетает.

Автор: eldar85 19.4.2010, 19:13

странно, написал программу, у меня на компе работает хорошо, а на других компах вылетает...
все библиотеки закинул в папку к экзэшнику... на моем компе экзэшник работает прерастно у меня вида 7 стоит, другу отправил, он на ХР запустил и капец... говорит вылетает...
в чем может быть косяк?

вот так выглядит мэйн

#include <QApplication>
#include <QTextCodec>
#include <QtGui>

#include "mainWindow.h"

void loadModules(QSplashScreen* psplash)
{
    QTime time;
    time.start();
    for (int i = 0; i<100;)
    {
        if(time.elapsed() > 20)
        {
            time.start();
            ++i;
        }
        psplash->showMessage("Loading modules: "
                             +QString::number(i)+"%",
                             Qt::AlignHCenter | Qt::AlignBottom,
                             Qt::black
                             );
    }
}


int main(int argc, char *argv[])
{
    QApplication app(argc, argv);
    QSplashScreen splash(QPixmap(":/images/qw.png"));
    splash.show();
    loadModules(&splash);


    //===============for support UTF-8=====================================
   QTextCodec::setCodecForTr(QTextCodec::codecForName("UTF-8"));
   QTextCodec::setCodecForCStrings(QTextCodec::codecForName("UTF-8"));
    mainWindow *window = new mainWindow;
    splash.finish(window);
    window->show();
    return app.exec();
}


когда загрузка доходит до 100% прога на другом компе вылетает...

Автор: Litkevich Yuriy 19.4.2010, 20:31

разница видимо в неодинаковой ширине данных у бинаря - 32 и 64 бита (Вин 7 ведь 64-х битная).

Автор: eldar85 19.4.2010, 20:36

получается то что я на семерке написал работать на других операционках не будет?? тогда же в чем кросплатформенность Qt? это можно как нибудь исправить?

Автор: kibsoft 19.4.2010, 21:19

Цитата(eldar85 @ 19.4.2010, 21:36) *
получается то что я на семерке написал работать на других операционках не будет?? тогда же в чем кросплатформенность Qt? это можно как нибудь исправить?

Сам тоже сижу на семерке, тестирую свои программы на виртуальной машине в системе windows 2000 и Kubuntu Linux. В 2000 все нормально работает, хотя скомпилено на семерке. В семерке заметил глюки при подключении модуля QtSql, иногда прога запускается раза с 3 :) может у меня сборка паленая какая..я самую первую скачал, там на одном диске были сразу все версии Ultimate И т.д.
P.S. Также заметил глюк с Qt Demo, картинка иногда перестает нормально рисоваться. Хотя в sqldeveloper тоже такая же трабла (написана на Java). Опять же видимо кривая сборка у меня.

Автор: eldar85 19.4.2010, 21:39

я до этого вообще ни разу не пробывал на других операционках, а тут другу отправил чтобы поглядел, она взяла и вылетать на ХР начала, сейчас завел на своем компе ХР и та же хрень, вылетает ГУИ... сначала загрузка идет нормально(картинка и бегущие проценты - ну это для вида), а как ГУИ начинает запускаться то вылетает... пипец... что теперь с этим делать... писал на Qt creator февральского выпуска, по моему самая последняя и такая жопа, раастроился капец...

вот тут вот советуют что то, но я энглишом не очень владею, так что не могу понять что есть где)
http://www.prog.org.ru/index.php?topic=13114.msg84960;topicseen
http://doc.trolltech.com/4.6/deployment-windows.html

я так понял что тут описано как сделать не динамические библиотеки а статические) кто нить этим уже занимался? я раз попробывал и вообще весь креатор запарол, пришлось переустанавливать... и у меня libcurl приделана к креатору, блин... наверное капец как сложно будет все это замутить...

Автор: Litkevich Yuriy 19.4.2010, 22:01

Цитата(eldar85 @ 20.4.2010, 0:36) *
тогда же в чем кросплатформенность Qt?
А где ты про кроссплатформенность прочитал?

Автор: eldar85 19.4.2010, 22:04

а разве Qt не кросплатформенна?)

Автор: Litkevich Yuriy 19.4.2010, 22:04

Цитата(eldar85 @ 20.4.2010, 1:39) *
сейчас завел на своем компе ХР и та же хрень, вылетает ГУИ
скомпилируй на XP, проверь. Если всё равно завершается аварийно - в коде касяк, ищи.

Цитата(eldar85 @ 20.4.2010, 2:04) *
а разве Qt не кросплатформенна?)
ну а ты это где прочитал?

Автор: eldar85 19.4.2010, 22:07

видимо придется пробывать по ХР... блин, ну под семеркой же нормально работает, вообще без проблем - разве это не значит что в коде все хорошо?

ну вообще где то на форумах)) я даже не заморачивался над этим))

Автор: Litkevich Yuriy 19.4.2010, 22:09

Цитата(eldar85 @ 20.4.2010, 2:06) *
разве это не значит что в коде все хорошо?
нет

Цитата(eldar85 @ 20.4.2010, 2:07) *
ну вообще где то на форумах)) я даже не заморачивался над этим))
Официально:
Цитата
Qt is a cross-platform application and UI framework. Using Qt, you can write web-enabled applications once and deploy them across desktop, mobile and embedded operating systems without rewriting the source code.

Автор: kibsoft 19.4.2010, 22:22

mainWindow *window = new mainWindow;

Что за объект создается? Если делал форму в дизайнере, а потом наследовал ui_mainWindow, то вероятно в конструкторе своего нового класса забыл setupUi(this). Выложи код посмотреть лучше.

А прогнал..на семерке же работает.. но лучше выложи код.

Автор: eldar85 19.4.2010, 22:43

да нет, я дезайнером не пользуюсь))) у меня полностью кодом нафигачено)))
ща попробую под ХР собрать и выложу код)

mainWindow::mainWindow(QMainWindow *parent)
    : QMainWindow(parent)

{
mainWidget = new QWidget(this);
setCentralWidget(mainWidget);
//======================actions====================================
createActions();
createMenu();
createToolBar();
createStatusBar();


    //=======================buttons==========
    start = new QPushButton(tr("&Cтарт"));
    start->setFont(QFont("Times", 10, QFont::Bold));
    start->setFixedWidth(70);
  

    clear = new QPushButton(tr("Очистить"));
    clear->setFont(QFont("Times", 10, QFont::Bold));
    clear->setFixedWidth(70);

    stop = new QPushButton(tr("Стоп!"));
    stop->setFont(QFont("Times", 10, QFont::Bold));
    stop->setFixedWidth(70);

    //====================massege area===================
    
    //====================label=============
    lineText1 = "Процесс выполнения программы: ";
    labelText = new QLabel(lineText1);
    labelText->setFont(QFont("Times", 10, QFont::AnyStyle));

    Messages = new QLabel("Укажите сколько циклов должно пройти");
    Messages->setFont(QFont("Times", 10, QFont::AnyStyle));

    send = new QLabel(".... ");
    send->setFont(QFont("Times", 10, QFont::AnyStyle));
    send->minimumSizeHint();

    messages = new QLabel("...");
    messages->setFont(QFont("Times", 10, QFont::AnyStyle));
    messages->setMinimumSize(messages->sizeHint());

    howMatch = new QLabel;
    howMatch->setFixedWidth(35);

    lcd = new QLCDNumber;
    lcd->setSegmentStyle(QLCDNumber::Flat);

    //===================text_area==============
    text = new QTextEdit;
    view = new QWebView;
    //view->setStyle(QSty);

    //reply = new QNetworkReply;



    //====================spinBox=============================
    spinbox = new QSpinBox;
    spinbox->setRange(0, 10000);
    spinbox->setFixedWidth(70);
    howMatchMessages->setBuddy(spinbox);

    //==============connects===============

    connect(start, SIGNAL(clicked()), this, SLOT(Start()));
    connect(clear, SIGNAL(clicked()), this, SLOT(Clear()));
    connect(stop, SIGNAL(clicked()), this, SLOT(Stop()));
    //connect(text, SIGNAL(textChanged(const QString &)), this, SLOT(enableStart(const QString &)) );
    connect(spinbox, SIGNAL(valueChanged(int)), this, SLOT(SpinBox(int)));
  

    QHBoxLayout *layoutHH = new QHBoxLayout;
    layoutHH->addWidget(Messages);
    layoutHH->addWidget(spinbox);
    layoutHH->addStretch();

    QHBoxLayout *layoutH = new QHBoxLayout;
    layoutH->addWidget(start);
    layoutH->addWidget(stop);
    layoutH->addWidget(clear);
    layoutH->addStretch();

    QVBoxLayout *layoutVV = new QVBoxLayout;
    layoutVV->addWidget(labelText);
    layoutVV->addWidget(view);


    QHBoxLayout *layoutHHH = new QHBoxLayout;
    layoutHHH->addWidget(send);
    layoutHHH->addWidget(lcd);
    layoutHHH->addWidget(messages);
    layoutHHH->addStretch();


    QVBoxLayout *mainLayout = new QVBoxLayout(mainWidget);
    //mainLayout->addLayout(layoutV);
    mainLayout->addLayout(layoutHH);
    mainLayout->addLayout(layoutH);
    mainLayout->addLayout(layoutVV);
    mainLayout->addLayout(layoutHHH);

    setLayout(mainLayout);

    //=====================Установка иконки и названия главного окна==================


    setWindowTitle(tr("..."));
    setWindowIcon(QIcon(":/images/el.png"));
    setMinimumSize(900, 600); //минимальный размер окна

}




#ifndef MAINWINDOW_H
#define MAINWINDOW_H


#include <QMainWindow>
#include <QLCDNumber>
#include <QtNetwork>


class QWebView;
class QSpinBox;
class QLabel;
class QLineEdit;
class QPushButton;
class QTextEdit;


class mainWindow : public QMainWindow
{
    Q_OBJECT

public:
   mainWindow(QMainWindow *parent = 0);
    QList<QString> list;


private:
        QWebView *view;
        QWidget *mainWidget;
        void createMenu();
        void createToolBar();
        void createActions();
        void createStatusBar();
        void makeFunktion();

        QMenu *fileMenu;
        QMenu *helpMenu;
        QToolBar *fileToolBar;
        QToolBar *aboutToolBar;
        QAction *openAction;
        QAction *aboutAction;
        QAction *stopAction;
        QAction *findAction;


        QNetworkReply *reply;
        QLCDNumber* lcd;
        
        
        QLabel *labelLine;
        QLabel *labelText;
        QLabel *howMatch;
        QLabel *howMatchMessages;
        QLabel *statusLabel;
        QPushButton *start;
        QPushButton *clear;
        QPushButton *stop;
        QSpinBox *spinbox;
        QString lineText1;
        QString openFile;
      

        int spinBoxInt;



private slots:


        void open();
        void SpinBox(int);
        void Clear();
        void Start();
        void Stop();
        void enableStart(const QString &text);
        void about();

      

};



#endif // MAINWINDOW_H

Автор: Litkevich Yuriy 19.4.2010, 22:45

начни с простого, комментируй по одной функции в конструкторе:
createActions();
createMenu();
createToolBar();
createStatusBar();

Автор: eldar85 19.4.2010, 22:46

блин, под ХР тот же креатор начал ругаться на #include <c++/string>
в чем прикол не пойму...

Автор: Litkevich Yuriy 19.4.2010, 22:55

Цитата(eldar85 @ 20.4.2010, 2:46) *
ругаться на #include <c++/string>
а каким компилятором-то компилируешь?

Автор: eldar85 19.4.2010, 23:12

mingw
блин собрал прогу под ХР и вылекатает гадина... ну под семеркой же работала... капец полный...


пишет так
приложение остановлено так как оно получило сигнал от операционной системы
сигнал: SIGSEGV
назначение sigmentation fault

Автор: Litkevich Yuriy 19.4.2010, 23:14

тебе нужно с помощью GDB обратную трассировку выполнить

Автор: eldar85 19.4.2010, 23:16

это как?) что такое GDB?
главное в чем прикол, прога у меня была собрана в дебаге и в релизе
дебаговский экзышник сейчас запустил и работает, а релиз нифига))

Автор: Litkevich Yuriy 19.4.2010, 23:18

Таким макаром:

gdb myapp.exe
gdb> run
... программа упадет
gdb> backtrace


Цитата(eldar85 @ 20.4.2010, 3:16) *
что такое GDB?
Отладчик из комплекта MinGW

Автор: eldar85 19.4.2010, 23:20

нифига не въеду и половина прог релиза работают написаны были с одинаковым интерфейсом, там отличие вообще в пару строк... вообще хрень какая то...

понятно, спасибо буду пробывать)

Автор: kwisp 20.4.2010, 7:52

Цитата(eldar85 @ 20.4.2010, 0:20) *
пару строк...

так покажи эти пару строк.

Автор: eldar85 20.4.2010, 15:42

ну я всего то дабавил web kit в код программы))) сейчас покажу что
добавил инклуд
#include <QtWebKit>

из этого кита использую только это

view = new QWebView;
view->setHtml(ddd); //в ddd  html код, загруженный курлом
view->load(QUrl("http://ya.ru")); //и вот это в завершении просто для того чтобы как браузер открыл яндекс

вот и все изменения...
как не странно сделаешь одиин проект, напишешь код, прога вылетает, возьмешь все тоже самое скопируешь в новый проект и полностью тот же код отлично работает))
может в компиляторе траблы???

Автор: Litkevich Yuriy 20.4.2010, 15:45

попробуй полностью пересобрать:
make distclean
qmake <обязательно имя файла проекта>
make

Автор: eldar85 20.4.2010, 16:15

спасибо. сегодня буду пробывать))
вот это make distclean чистиет чтото??

Автор: Litkevich Yuriy 20.4.2010, 16:54

Цитата(eldar85 @ 20.4.2010, 20:15) *
вот это make distclean чистиет чтото??
выполнишь узнаешь
А вообще смотри makefile, соответствующую цель

Автор: eldar85 20.4.2010, 19:40

сделал все, не помогло...

как не странно, я даже скомпилировать не могу этот проект под ХР, ругается на что то, но это точно траблы не в коде... вот уж не ожидал такого... уже второй день никак разобраться не могу... сейчас новый креатор ставлю, посмотрим что он выдаст...

а как удалить все настройки креатора который я удалил и на его месте поставил новый? а то новый сразу принемает те же настройки....

Автор: Litkevich Yuriy 20.4.2010, 20:20

Цитата(eldar85 @ 20.4.2010, 23:40) *
сделал все, не помогло...
Цитата(eldar85 @ 20.4.2010, 23:40) *
сейчас новый креатор ставлю, посмотрим что он выдаст...
дак ты где команды выполнял в краторе или в консоли?

Автор: eldar85 20.4.2010, 20:41

в консоли
я еще и все файлы с расширением .о удалил из проекта.
теперь вообще круть поперла, начинаю компилировать проект, комп ревет аж, посмотрел в диспетчере задачь, там мингв32 один за другим запускаются и все больше и больше... их там чуть ли не до сотни дошло, пришлось аварийно перезагружаться))
блин и новый креатор ставлю, он остается с прежними параметрами))) просто зашибись... и удалить не знаю как...

Автор: Litkevich Yuriy 20.4.2010, 20:48

Цитата(eldar85 @ 21.4.2010, 0:41) *
я еще и все файлы с расширением .о удалил из проекта.
это делается командой
make distclean

Цитата(eldar85 @ 21.4.2010, 0:41) *
там мингв32 один за другим запускаются и все больше и больше
как-то у меня такое было, из-за чего я не понял, помогла просто перезагрузка машины. Т.к. прерывания и повторные запуски make не помогали.

Автор: eldar85 20.4.2010, 20:59

я три раза перегружал)) главное запускаю компиляцию и началось, тут же вырубаю, завожу все заново и снова запускаю проект и снова... и главное не успеваю в диспетчере процесс скинуть потому что пока я один сбрасываю, вылазиет три новых))) вот уж головная боль на голову )))))))

Цитата
это делается командой
make distclean

если честно я эту команду пробывал в консоли запустить, но так и не въехал в какой директории ее запускать и к чему она относиться)

Автор: Litkevich Yuriy 20.4.2010, 23:30

Цитата(eldar85 @ 21.4.2010, 0:59) *
директории ее запускать и к чему она относиться
в которой твои make-файлы лежат

Автор: eldar85 21.4.2010, 9:43

вот так:
c:/workspace/proga> make distclean ?????????????

я в CMD почти ничего и не делал ни рузу)

в дебаге вот на это начинает ругаться

0x6a2c3e93     mov    0x4(%ecx),%eax


может я в main.cpp что то не так сделал?)

вот сейчас в отладке собираю и перед загрузкой ГУИ выводит так:

приложение остановлено так как оно получило сигнал от операционной системы
сигнал: SIGSEGV
назначение sigmentation fault

ну и указывает на эту строку:
0x6a2c3e93 mov 0x4(%ecx),%eax

Автор: kwisp 21.4.2010, 10:38

eldar85,
если ты добавил в проект QtWebKit модуль, то просто обязан в файл проекта добавить QT+=webkit иначе программа не слинкуется. по моему это твой случай, тыже говоришь что в готовый проект добавил 2 строчки и получил проблемы.
читай о корректном добавлении модулей qt в программу в ассистенте и покажи ошибки сборки проекта.

П.С.
и судя по твоим проблемам и ошибкам, оставь пока creator в покое, разберись как создать проект в консоли, как собрать/персобрать программу и проч и проч.

Автор: eldar85 21.4.2010, 13:39

а ну про эту строчку я не забыл))
вот код .pro файла

SOURCES += main.cpp \
    mainWindow.cpp
HEADERS += mainWindow.h \
    as_curl.h
LIBS += -L$(MINGW_LIB) \
    -lcurl \
    -lcurldll
RESOURCES = icon.qrc
QT += network
QT += webkit


она собирается без проблем, но при запуске экзэшника вылетает, причем на моем компе виндовс7 почти все нормально, вылетает редко с сообщением "отправить отчет об ошибке" а на компах с ХР зараза всегда вылетает...

вообще идея не плохая, попробую собрать в консоли)

Автор: eldar85 21.4.2010, 14:20

да и в своей винде я встречаю проблему вылет программы только в отладке, если просто линковать то она работает)
в отладчике пробуешь, там показывает на эту проблему не понятную.
и на ХР не работает.

отладчик вообще указывает на косяк QtGuid4.dll QtCore4.dll которые я к экзэшнику закинул))

Автор: Litkevich Yuriy 21.4.2010, 14:25

Цитата(eldar85 @ 21.4.2010, 17:39) *
LIBS += -L$(MINGW_LIB) \
-lcurl \
-lcurldll
тут несколько вопросов:
для чего $(MINGW_LIB)?
две curl'овские библиотеки, это действительно должно быть так (с ним никогда не сталкивался)?

Автор: eldar85 21.4.2010, 14:52

там просто к ним путь прописан и они у меня закинуты по этому пути) я так уже давно использую эти библиотеки и никаких проблем еще с этим не было)))
вроде отладчик на QLayout ругается. разве в mainWindow.cpp я не правельно расположил лайауты?

 QHBoxLayout *layoutHH = new QHBoxLayout;
    layoutHH->addWidget(howMatch);
    layoutHH->addWidget(spinbox);
    layoutHH->addStretch();

    QHBoxLayout *layoutH = new QHBoxLayout;
    layoutH->addWidget(start);
    layoutH->addWidget(stop);
    layoutH->addWidget(clear);
    layoutH->addStretch();

    QVBoxLayout *layoutVV = new QVBoxLayout;
    layoutVV->addWidget(labelText);
    layoutVV->addWidget(view);


    QHBoxLayout *layoutHHH = new QHBoxLayout;
    layoutHHH->addWidget(send);
    layoutHHH->addWidget(lcd);
    layoutHHH->addWidget(messages);
    layoutHHH->addStretch();


    QVBoxLayout *mainLayout = new QVBoxLayout(mainWidget);
    //mainLayout->addLayout(layoutV);
    mainLayout->addLayout(layoutHH);
    mainLayout->addLayout(layoutH);
    mainLayout->addLayout(layoutVV);
    mainLayout->addLayout(layoutHHH);


вот сообщение отладчика в консоли приложения:

Lowest section in C:\Windows\system32\sfc.dll is .text at 00401000

Автор: eldar85 21.4.2010, 21:27

нашел косяк, только не понял почему вылетает прога из за него)))

 QHBoxLayout *layoutHH = new QHBoxLayout;
    layoutHH->addWidget(howMatch);
    layoutHH->addWidget(spinbox);
    layoutHH->addStretch();

    QHBoxLayout *layoutH = new QHBoxLayout;
    layoutH->addWidget(start);
    layoutH->addWidget(stop);
    layoutH->addWidget(clear);
    layoutH->addStretch();

    QVBoxLayout *layoutVV = new QVBoxLayout;
   // layoutVV->addWidget(labelText);      //убрал вот эту строчку из кода и сразу все заработало)))) но какая проблема в этой строке???))
    layoutVV->addWidget(view);


    QHBoxLayout *layoutHHH = new QHBoxLayout;
    layoutHHH->addWidget(send);
    layoutHHH->addWidget(lcd);
    layoutHHH->addWidget(messages);
    layoutHHH->addStretch();


    QVBoxLayout *mainLayout = new QVBoxLayout(mainWidget);
    //mainLayout->addLayout(layoutV);
    mainLayout->addLayout(layoutHH);
    mainLayout->addLayout(layoutH);
    mainLayout->addLayout(layoutVV);
    mainLayout->addLayout(layoutHHH);

Автор: eldar85 22.4.2010, 8:27

и главное проблема была в том что этот QLabel использовала адресс не допустимый для операционки и она вылетала...

Форум Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)