Вопросы по Qt (ну и по С++ заодно)

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

Вопросы по Qt (ну и по С++ заодно)

Сообщение dccharacter » 08 мар 2011, 03:10

Ну раз Dead говорит, что тут живет коллективный разум, надо его использовать :-)

Скажите, почему вот это не работает и программа вылетает?

Код: Выделить всё
void MainWindow::displaySocketStateOnStatusBar(QAbstractSocket::SocketState socketState)
{
   /* switch (socketState)
    {
    case QAbstractSocket::UnconnectedState:
        ui->statusBar->showMessage("Not connected");
        break;
    case QAbstractSocket::HostLookupState:
        ui->statusBar->showMessage("Looking up host...");
        break;
    case QAbstractSocket::ConnectingState:
        ui->statusBar->showMessage("Connecting to host...");
        break;
    case QAbstractSocket::ConnectedState:
        ui->statusBar->showMessage("Connected to host");
        break;
    case QAbstractSocket::BoundState:
        ui->statusBar->showMessage("Bound");
        break;
    case QAbstractSocket::ClosingState:
        ui->statusBar->showMessage("Closing current connection...");
        break;
    case QAbstractSocket::ListeningState:
        ui->statusBar->showMessage("Listening...");
        break;
    }
    */
}
Мой волшебник это я сам. Всю архитектуру программы придумал лично, а ребята помогли воплотить её. Я бы и сам мог написать, но лень учить язык и его конструкции.
Аватара пользователя
dccharacter
 
Сообщения: 4995
Зарегистрирован: 10 дек 2010, 13:16
Откуда: Красногорск МО
прог. языки: C, Python, wiring/processing
ФИО: Андрей

Re: Вопросы по Qt (ну и по С++ заодно)

Сообщение AndreiSk » 08 мар 2011, 03:33

Вылетает с какими эффектами?
Аватара пользователя
AndreiSk
 
Сообщения: 2639
Зарегистрирован: 23 апр 2009, 17:03
Откуда: Москва, Самара
прог. языки: C#

Re: Вопросы по Qt (ну и по С++ заодно)

Сообщение dccharacter » 08 мар 2011, 03:53

AndreiSk писал(а):Вылетает с какими эффектами?

[Window Title]
Com2tcP.exe

[Main Instruction]
Com2tcP.exe has stopped working

[Content]
Windows is checking for a solution to the problem...

[Cancel]

Если в дебагере смотреть, то

---------------------------
Получен сигнал
---------------------------
<p>Приложение остановлено, так как оно получило сигнал от операционной системы.<p><table><tr><td>Сигнал: </td><td>SIGSEGV</td></tr><tr><td>Назначение: </td><td>Segmentation fault</td></tr></table>
---------------------------
ОК
---------------------------


Кстати, вопрос - а это вообще умно - перебирать все стейты в свитче? У ошибок есть метод .toString(), а вот у состояний - нету. Может как-то можно его без switch привести к виду строки?
Мой волшебник это я сам. Всю архитектуру программы придумал лично, а ребята помогли воплотить её. Я бы и сам мог написать, но лень учить язык и его конструкции.
Аватара пользователя
dccharacter
 
Сообщения: 4995
Зарегистрирован: 10 дек 2010, 13:16
Откуда: Красногорск МО
прог. языки: C, Python, wiring/processing
ФИО: Андрей

Re: Вопросы по Qt (ну и по С++ заодно)

Сообщение =DeaD= » 08 мар 2011, 09:32

Segmentation Fault это что-то с библиотеками вроде...

Откуда код взят и что передаёте в функцию?
Проект [[Open Robotics]] - Универсальные модули для построения роботов
Аватара пользователя
=DeaD=
 
Сообщения: 24218
Зарегистрирован: 06 окт 2004, 18:01
Откуда: Ебург
прог. языки: C++ / PHP / 1C
ФИО: Антон Ботов

Re: Вопросы по Qt (ну и по С++ заодно)

Сообщение blindman » 08 мар 2011, 09:36

В отладчике надо смотреть по стэку вызовов откуданоги растут
Проект [[Open Robotics]] - универсальные модули для построения роботов
Модули Open Robotics можно приобрести в магазине shop.roboforum.ru

Day OFF? You must be pulling my leg! Stop making humor before someone sees you, fool!

Аватара пользователя
blindman
 
Сообщения: 4130
Зарегистрирован: 29 апр 2008, 21:15
Откуда: Хабаровск
прог. языки: C,C++,Assembler,PHP,Javascript,Ruby, SPIN,Java(?)
ФИО: Андрей Юрьевич

Re: Вопросы по Qt (ну и по С++ заодно)

Сообщение Vooon » 08 мар 2011, 13:45

strace

Сегфолт возникает из-за выхода за пределы памяти.
Смотри все указатели.
Linux user | Firefox user
Аватара пользователя
Vooon
Site Admin
 
Сообщения: 3339
Зарегистрирован: 09 фев 2006, 15:36
Откуда: Москва
Skype: vooon341
прог. языки: Python, C, Bash, JavaScript, C++, PHP
ФИО: Владимир Ермаков

Re: Вопросы по Qt (ну и по С++ заодно)

Сообщение dccharacter » 08 мар 2011, 17:30

А я не умею :-(((
Unhandled exception at 0x6a15b15b in Com2tcP.exe: 0xC0000005: Access violation reading location 0x00000129.

Происходит при вызове statusBar->showMessage();

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

Добавлено спустя 1 час 2 минуты 17 секунд:
Вот у чувака такая же проблема, я два раза прочитаел, так и не понял - решил он ее или нет и если да, то как???
http://www.prog.org.ru/topic_7224_0.html

Еще раз, в конструкторе главного окна создаю и инициализирую субстанцию QStatusBar, определяю его как статусбар главного окна, вывожу на него пустое сообщение, потом вывожу "Disconnected". Работает.
Код: Выделить всё
MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    QStatusBar *socketStatusBar = new QStatusBar;
    socketStatusBar->setSizePolicy(QSizePolicy::Ignored, QSizePolicy::Fixed);
    this->setStatusBar(socketStatusBar);
    socketStatusBar->showMessage("");

    tcpSocket = new QTcpSocket(this);

    socketStatusBar->showMessage("Disconnected");


А вот в этом слоте уже не работает:
Код: Выделить всё
void MainWindow::displaySocketStateOnStatusBar(QAbstractSocket::SocketState socketState)
{
    switch (socketState)
    {
    case QAbstractSocket::UnconnectedState:
        socketStatusBar->showMessage("Not connected");
        break;
    case QAbstractSocket::HostLookupState:
        socketStatusBar->showMessage("Looking");
        break;
    case QAbstractSocket::ConnectingState:
        socketStatusBar->showMessage("Connecting.");
        break;
    case QAbstractSocket::ConnectedState:
        socketStatusBar->showMessage("Connected");
        break;
    case QAbstractSocket::BoundState:
        socketStatusBar->showMessage("Bound");
        break;
    case QAbstractSocket::ClosingState:
        socketStatusBar->showMessage("Closing");
        break;
    case QAbstractSocket::ListeningState:
        socketStatusBar->showMessage("Listening");
        break;
    }

}


Может с областью видимости что-то????
Мой волшебник это я сам. Всю архитектуру программы придумал лично, а ребята помогли воплотить её. Я бы и сам мог написать, но лень учить язык и его конструкции.
Аватара пользователя
dccharacter
 
Сообщения: 4995
Зарегистрирован: 10 дек 2010, 13:16
Откуда: Красногорск МО
прог. языки: C, Python, wiring/processing
ФИО: Андрей

Re: Вопросы по Qt (ну и по С++ заодно)

Сообщение blindman » 08 мар 2011, 17:44

Телепатирую.
socketStatusBar у тебя объявлен как член класса MainWindow, а в конструкторе ты создаешь локальную переменную socketStatusBar. socketStatusBar - член класса MainWindow остается неинициализированным, а ты к нему обращаешься.
Проект [[Open Robotics]] - универсальные модули для построения роботов
Модули Open Robotics можно приобрести в магазине shop.roboforum.ru

Day OFF? You must be pulling my leg! Stop making humor before someone sees you, fool!

Аватара пользователя
blindman
 
Сообщения: 4130
Зарегистрирован: 29 апр 2008, 21:15
Откуда: Хабаровск
прог. языки: C,C++,Assembler,PHP,Javascript,Ruby, SPIN,Java(?)
ФИО: Андрей Юрьевич

Re: Вопросы по Qt (ну и по С++ заодно)

Сообщение dccharacter » 08 мар 2011, 17:51

blindman писал(а):Телепатирую.
socketStatusBar у тебя объявлен как член класса MainWindow, а в конструкторе ты создаешь локальную переменную socketStatusBar. socketStatusBar - член класса MainWindow остается неинициализированным, а ты к нему обращаешься.


Уверен что так и есть :-)
Но я уже окончательно запутался, что делаеть? Не объявлять членом класса?

Добавлено спустя 1 минуту 2 секунды:
ЙЕЕЕЕЕЕЕЕЕСССС :-)
Спасибо :-))))
Оно и было :-)

Добавлено спустя 32 секунды:
Правда оно теперь не работает, но это мелочи :-) Зато не вылетает :-)))

Добавлено спустя 3 минуты 6 секунд:
хе хе хе, работает :-)
Мой волшебник это я сам. Всю архитектуру программы придумал лично, а ребята помогли воплотить её. Я бы и сам мог написать, но лень учить язык и его конструкции.
Аватара пользователя
dccharacter
 
Сообщения: 4995
Зарегистрирован: 10 дек 2010, 13:16
Откуда: Красногорск МО
прог. языки: C, Python, wiring/processing
ФИО: Андрей

Re: Вопросы по Qt (ну и по С++ заодно)

Сообщение dccharacter » 09 мар 2011, 21:04

А как подключить репозиторий ORFA терминала? Mercurial установил, создал хранилище, все опции mercurial в меню инструменты qt creator'а продолжают быть серыми, недоступными?

Добавлено спустя 10 минут 20 секунд:
неактуально :-)
Мой волшебник это я сам. Всю архитектуру программы придумал лично, а ребята помогли воплотить её. Я бы и сам мог написать, но лень учить язык и его конструкции.
Аватара пользователя
dccharacter
 
Сообщения: 4995
Зарегистрирован: 10 дек 2010, 13:16
Откуда: Красногорск МО
прог. языки: C, Python, wiring/processing
ФИО: Андрей

Re: Вопросы по Qt (ну и по С++ заодно)

Сообщение Angel71 » 09 мар 2011, 21:20

Код: Выделить всё
#include <exception>
#include <iostream>

try
  {
  }
catch ()
{
}

:) вот как-то так иногда можно. и вопросов меньше возникает и софт как минимум не вылетает.
Последний раз редактировалось Angel71 09 мар 2011, 21:29, всего редактировалось 1 раз.
Аватара пользователя
Angel71
 
Сообщения: 10668
Зарегистрирован: 18 апр 2009, 22:18

Re: Вопросы по Qt (ну и по С++ заодно)

Сообщение dccharacter » 09 мар 2011, 21:28

Гринблатт из меня тоже не вырастет уже :-))
Мой волшебник это я сам. Всю архитектуру программы придумал лично, а ребята помогли воплотить её. Я бы и сам мог написать, но лень учить язык и его конструкции.
Аватара пользователя
dccharacter
 
Сообщения: 4995
Зарегистрирован: 10 дек 2010, 13:16
Откуда: Красногорск МО
прог. языки: C, Python, wiring/processing
ФИО: Андрей

Re: Вопросы по Qt (ну и по С++ заодно)

Сообщение blindman » 10 мар 2011, 06:24

Angel71 писал(а):вот как-то так иногда можно. и вопросов меньше возникает и софт как минимум не вылетает.

нуну
Код: Выделить всё
andrey@debian:/tmp$ cat test.cpp
#include <iostream>

int main()
{
   char *x = 0;
   try {*x = 2;}
   catch (...) { std::cout << "OOPS!\n";   }
   return 0;
}
andrey@debian:/tmp$ g++ -otest test.cpp
andrey@debian:/tmp$ ./test
Ошибка сегментирования
andrey@debian:/tmp$
Проект [[Open Robotics]] - универсальные модули для построения роботов
Модули Open Robotics можно приобрести в магазине shop.roboforum.ru

Day OFF? You must be pulling my leg! Stop making humor before someone sees you, fool!

Аватара пользователя
blindman
 
Сообщения: 4130
Зарегистрирован: 29 апр 2008, 21:15
Откуда: Хабаровск
прог. языки: C,C++,Assembler,PHP,Javascript,Ruby, SPIN,Java(?)
ФИО: Андрей Юрьевич

Re: Вопросы по Qt (ну и по С++ заодно)

Сообщение dccharacter » 10 мар 2011, 14:00

Для заметки: серия статей на хабре "Hg init" про Mercurial:

http://habrahabr.ru/blogs/development_tools/108658/

Добавлено спустя 3 минуты 11 секунд:
Похоже бился я с коммитом через то, что центральный репозиторий в самом начале не склонировал. Правда пока не понял, как это сделать, но вечером, похоже, надо будет хранилища пересоздавать...

Добавлено спустя 7 минут 55 секунд:
"ААААА!!! Ошибка! Да, кстати, видите сообщение? То, в котором написано используйте ключ -f для принудительного проталкивания (use push -f to force)? Это ужасный совет. Никогда и ни за что не используйте ключ -f. Вы пожалеете о том, что использовали его. Просто поверьте мне в данный момент."

гы гы гы
Мой волшебник это я сам. Всю архитектуру программы придумал лично, а ребята помогли воплотить её. Я бы и сам мог написать, но лень учить язык и его конструкции.
Аватара пользователя
dccharacter
 
Сообщения: 4995
Зарегистрирован: 10 дек 2010, 13:16
Откуда: Красногорск МО
прог. языки: C, Python, wiring/processing
ФИО: Андрей

Re: Вопросы по Qt (ну и по С++ заодно)

Сообщение dccharacter » 10 мар 2011, 22:32

Люди, помогите наладить репозиторий Mercurial в QT. Захожу в меню "Система контроля версий"->Mercurial. Активен только один пункт - Создать хранилище. Выбираю папку, там автоматически создается папка .hg, т.е. хранилище создано. После этого ничегошеньки не меняется. В меню точно также активен отлько один пункт - создать хранилище. При попытке создать его в той же папке, говорит что там уже есть хранилище и предлагает отказаться.

Что делать?


ЙЕЕЕЕЕЕЕЕЕЕЕЕЕЕЕЕС, нашел в хелпе тудыть его растудыть. Надо выбрать меню файл, создать НОВЫЙ ПРОЕКТ (логично, да?), выбрать "из системы контроля версий", дальше все интуитивно...
Мой волшебник это я сам. Всю архитектуру программы придумал лично, а ребята помогли воплотить её. Я бы и сам мог написать, но лень учить язык и его конструкции.
Аватара пользователя
dccharacter
 
Сообщения: 4995
Зарегистрирован: 10 дек 2010, 13:16
Откуда: Красногорск МО
прог. языки: C, Python, wiring/processing
ФИО: Андрей

След.

Вернуться в Компьютеры в роботостроении

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 5