roboforum.ru

Технический форум по робототехнике.
Текущее время: 06 апр 2025, 00:17

Часовой пояс: UTC + 4 часа




Начать новую тему Ответить на тему  [ Сообщений: 31 ]  На страницу Пред.  1, 2, 3  След.
Автор Сообщение
 Заголовок сообщения: Re: Вопросы по Qt (ну и по С++ заодно)
СообщениеДобавлено: 10 мар 2011, 23:13 
Не в сети
Аватара пользователя

Зарегистрирован: 18 апр 2009, 22:18
Сообщения: 10668
blindman, http://www.visualdata.ru/blog/109-segv-signal.html
:) а с кэтчами согласен, погорячился.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Вопросы по Qt (ну и по С++ заодно)
СообщениеДобавлено: 02 апр 2011, 15:23 
Не в сети
Аватара пользователя

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

:: error: No rule to make target `e:/Qt/2010.05/qt/include/qextserialport-build-desktop/build/qextserialportd.prl', needed by `makefile'. Stop.

при этом проект qextserial вообще закрыт. Все файлы из директории BUILD qextserial скопированы в директорию orfa-term, он их видит. (кстати, нифига не работают у меня переменные окружения - я добавляю пути и как user path, и как system path, но в итоге все равно приходится все библиотеки, типа qt4_gui весом по 50-150МБ каждая копировать в папку сборки проекта - что за нафик?).

Добавлено спустя 1 час 10 минут:
Вчсе, решил - выпилил из make-файла все упоминания qextserial. собралось.

Но все равно в каждую билд-директорию надо копировать QT-шные и другие библиотеки, иначе не работает. Как это побороть?

_________________
Мой волшебник это я сам. Всю архитектуру программы придумал лично, а ребята помогли воплотить её. Я бы и сам мог написать, но лень учить язык и его конструкции.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Вопросы по Qt (ну и по С++ заодно)
СообщениеДобавлено: 07 апр 2011, 13:16 
Не в сети
Аватара пользователя

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

1. У меня контроллер и ПК обмениваются командами длиной 4 байта. Команда начинается либо с 's', либо с 'g' (set/get), дальше идет адрес регистра в управляющем блоке, значение регистра (для команты get - это don't care character), заканчивается 'p'.

2. Я на QT как-то имхо убого формирую команду - работает, но мне не очень нравится.
Код:
QString cmd;
cmd.append('s').append(0x05).append(0x4A).append('p');

Можно ли как-то сделать лучше/правильней/и т.д.??

3. А вот с приемкой и, главное, отображением - вообще кисляк:
3а. Если просто показываю полученную команду, то что адрес, что значение - могут быть любыми символами, в т.ч. таб, черточки, палочки и т.д. - наверное надо как-то парсить команду и отображать в человековаримом виде...
3б. Если надо отобразить значение value:
Код:
QByteArray cmd;
cmd = serialPort->readAll(); //сразу в стринг не могу читать, потому что значения могут быть в т.ч. и нулевые, что автоматом нуль-терминирует строку
QString cmd_str;
cmd_str.setNum(cmd.at(2)); //вот тут большая часть значений показывается ОК, но на некоторых значениях value строка принимает какое-то непонятное значение (думаю - 127 что ли...), но понять причину этого не могу. Это чаще всего происходит в начале диапазона, т.е. от 0x00 и до, скажем навскидку 0x30, и несколько раз проскакивает ближе к концу диапазона...

_________________
Мой волшебник это я сам. Всю архитектуру программы придумал лично, а ребята помогли воплотить её. Я бы и сам мог написать, но лень учить язык и его конструкции.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Вопросы по Qt (ну и по С++ заодно)
СообщениеДобавлено: 31 май 2011, 12:58 
Не в сети

Зарегистрирован: 31 май 2011, 12:43
Сообщения: 24
dccharacter писал(а):
2. Я на QT как-то имхо убого формирую команду - работает, но мне не очень нравится.
Код:
QString cmd;
cmd.append('s').append(0x05).append(0x4A).append('p');

Можно ли как-то сделать лучше/правильней/и т.д.??


Код:
QString str;
quint8 x=0x05,y=0x4A;
str.append(QString("s%1%2p").arg(x).arg(y));
qDebug()<<str;


Возможно так будет лучше?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Вопросы по Qt (ну и по С++ заодно)
СообщениеДобавлено: 04 авг 2011, 00:08 
Не в сети
Аватара пользователя

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

Есть QByteArray, первые два байта равны 00h 1eh (т.е. если выводить QByteArray.toHex(), то кажет 001ехххххх). Теперь надо показать это в виде числа на лейбл. Сделал label->setNum(QByteArray->left(2).toInt()) - чего-то постоянно 0 показывает. Ну и так и сяк пробую - либо ничего не показывает (ну, точнее в АСКИИ), либо 0. Если же взять label->setNum(QByteArray->at(1)), то показывает нормально циферку 30.

Добавлено спустя 1 час 4 минуты 56 секунд:
Твою ж мать! 2 часа!
ui->outputVoltageValue->setNum(fromSerialPort->left(2).toHex().toInt(0,16));

_________________
Мой волшебник это я сам. Всю архитектуру программы придумал лично, а ребята помогли воплотить её. Я бы и сам мог написать, но лень учить язык и его конструкции.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Вопросы по Qt (ну и по С++ заодно)
СообщениеДобавлено: 04 авг 2011, 00:46 
Не в сети
Аватара пользователя

Зарегистрирован: 16 май 2009, 12:50
Сообщения: 1530
Откуда: Россия
прог. языки: Java, C
Т.е просто QByteArray->left(2).toInt(0, 16) не катит?

_________________
"There is nothing better than sliding down snow and flying through the air" (с) Shane McConkey.
Lieber ein Brett am Fuß als eins vorm Kopf, aber lieber ein Brett vorm Kopf als zwei am Fuß.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Вопросы по Qt (ну и по С++ заодно)
СообщениеДобавлено: 04 авг 2011, 01:50 
Не в сети
Аватара пользователя

Зарегистрирован: 10 дек 2010, 13:16
Сообщения: 4995
Откуда: Красногорск МО
прог. языки: C, Python, wiring/processing
ФИО: Андрей
нет!
т.е. оно не может перевести, скажем 'a' в 97. Оно может только 'a'->61h->97

Добавлено спустя 1 минуту 16 секунд:
ну т.е. если бы там было '2' или "234", то оно бы перевело toInt-ом сразу в 2 и 234 соответственно, а вот на "018f" уже фейлится.

_________________
Мой волшебник это я сам. Всю архитектуру программы придумал лично, а ребята помогли воплотить её. Я бы и сам мог написать, но лень учить язык и его конструкции.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Вопросы по Qt (ну и по С++ заодно)
СообщениеДобавлено: 05 авг 2011, 06:45 
Не в сети
Аватара пользователя

Зарегистрирован: 29 апр 2008, 21:15
Сообщения: 4130
Откуда: Хабаровск
прог. языки: C,C++,Assembler,PHP,Javascript,Ruby, SPIN,Java(?)
ФИО: Андрей Юрьевич
Код:
#include <QtEndian>
ui->outputVoltageValue->setNum(qFromBigEndian<quint16>((const uchar*)fromSerialPort->constData()));


fromSerialPort должен содержать не менее 2 байт

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

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



Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Вопросы по Qt (ну и по С++ заодно)
СообщениеДобавлено: 05 авг 2011, 11:25 
Не в сети
Аватара пользователя

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

_________________
Мой волшебник это я сам. Всю архитектуру программы придумал лично, а ребята помогли воплотить её. Я бы и сам мог написать, но лень учить язык и его конструкции.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Вопросы по Qt (ну и по С++ заодно)
СообщениеДобавлено: 05 авг 2011, 12:15 
Не в сети
Аватара пользователя

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

Код:
    qDebug("%d", qFromBigEndian<quint16>((const uchar*)ba->constData()));
8054394:   8b 45 dc                mov    -0x24(%ebp),%eax
8054397:   89 04 24                mov    %eax,(%esp)
805439a:   e8 ff 67 00 00          call   805ab9e <_ZNK10QByteArray9constDataEv>
805439f:   89 04 24                mov    %eax,(%esp)
80543a2:   e8 38 c8 00 00          call   8060bdf <_Z14qFromBigEndianItET_PKh>
80543a7:   0f b7 c0                movzwl %ax,%eax
80543aa:   89 44 24 04             mov    %eax,0x4(%esp)
80543ae:   c7 04 24 6d 2c 08 08    movl   $0x8082c6d,(%esp)
80543b5:   e8 46 f2 ff ff          call   8053600 <_Z6qDebugPKcz@plt>

0805ab9e <_ZNK10QByteArray9constDataEv>:
inline const char *QByteArray::data() const
{ return d->data; }
inline const char *QByteArray::constData() const
{ return d->data; }
805ab9e:   55                      push   %ebp
805ab9f:   89 e5                   mov    %esp,%ebp
805aba1:   8b 45 08                mov    0x8(%ebp),%eax
805aba4:   8b 00                   mov    (%eax),%eax
805aba6:   8b 40 0c                mov    0xc(%eax),%eax
805aba9:   5d                      pop    %ebp
805abaa:   c3                      ret   
805abab:   90                      nop

08060bdf <_Z14qFromBigEndianItET_PKh>:
        | src[0] * quint32(0x01000000);
}

template<>
inline quint16 qFromBigEndian<quint16>(const uchar *src)
{
8060bdf:   55                      push   %ebp
8060be0:   89 e5                   mov    %esp,%ebp
    return quint16( 0
                    | src[1]
8060be2:   8b 45 08                mov    0x8(%ebp),%eax
8060be5:   83 c0 01                add    $0x1,%eax
8060be8:   0f b6 00                movzbl (%eax),%eax
                    | src[0] * quint16(0x0100));
8060beb:   0f b6 d0                movzbl %al,%edx
8060bee:   8b 45 08                mov    0x8(%ebp),%eax
8060bf1:   0f b6 00                movzbl (%eax),%eax
8060bf4:   0f b6 c0                movzbl %al,%eax
8060bf7:   c1 e0 08                shl    $0x8,%eax
8060bfa:   09 d0                   or     %edx,%eax
}
8060bfc:   5d                      pop    %ebp
8060bfd:   c3                      ret   

то есть всего 3 десятка команд.

А вызовы left() и toHex() каждый создают экземпляры класса QByteArray (причем не 2, как может показаться, а больше), с выделением памяти и последующем удалением.

Насчет того, будут ли переставляться байты - зависит от того, под какой процессор компилируется. У тебя, как я понял, данные передаются как big endian (сначала старший байт), поэтому и использована qFromBigEndian(). Это шаблонная функция, которая учитывает тип возвращаемого значения и порядок байтов целевого процессора

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

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



Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Вопросы по Qt (ну и по С++ заодно)
СообщениеДобавлено: 05 авг 2011, 12:20 
Не в сети
Аватара пользователя

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

_________________
Мой волшебник это я сам. Всю архитектуру программы придумал лично, а ребята помогли воплотить её. Я бы и сам мог написать, но лень учить язык и его конструкции.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Вопросы по Qt (ну и по С++ заодно)
СообщениеДобавлено: 27 окт 2011, 21:35 
Не в сети
Аватара пользователя

Зарегистрирован: 10 дек 2010, 13:16
Сообщения: 4995
Откуда: Красногорск МО
прог. языки: C, Python, wiring/processing
ФИО: Андрей
Помогайте ПЛЗ. Пытаюсь создать диалоговое окно, смотрю вот на этот пример http://doc.qt.nokia.com/vs-add-in-1.1.7 ... ess-dialog:
Код:
AddDialog dialog(this);

if (dialog.exec()) {
             QString name = dialog.nameEdit->text();
             QString email = dialog.emailEdit->text();

             if (!name.isEmpty() && !email.isEmpty()) {
                     QListWidgetItem *item = new QListWidgetItem(name, ui.addressList);
                     item->setData(Qt::UserRole, email);
                     ui.addressList->setCurrentItem(item);
             }
     }


У меня есть две формы - mainwindow.ui, dialog.ui. Объект класса Dialog является членом класса MainWindow:
Код:
class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();

private:
    Ui::MainWindow *ui;
    Dialog *settingsDialog;
};


Создаем объект в конструкторе:
Код:
MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    settingsDialog = new Dialog(this);
}


Проблема - объект MainWindow не видит объекты-члены settingsDialog (что, вроде как логично). На форумах говорят, что мол делай для каждого поля окна настроек метод, возвращающий значение. По логике я могу сделать метод класса Dialog, который при нажатии кнопки ОК будет ссыпать все настройки в файл настроек. А MainWindow будет оттуда настройки читать. Но я точно знаю, что Dead каким-то образом в orfa-terminal делал по-человечески, т.е. из методов MainWindow есть доступ к методам Dialog - но я уже всю бошку об стол разбил - не пойму как это сделано.

_________________
Мой волшебник это я сам. Всю архитектуру программы придумал лично, а ребята помогли воплотить её. Я бы и сам мог написать, но лень учить язык и его конструкции.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Вопросы по Qt (ну и по С++ заодно)
СообщениеДобавлено: 27 окт 2011, 21:43 
Не в сети
Аватара пользователя

Зарегистрирован: 16 май 2009, 12:50
Сообщения: 1530
Откуда: Россия
прог. языки: Java, C
Вообще то геттеры и сеттеры спасут вас. Это и есть правильное решение :)

Добавлено спустя 1 минуту 10 секунд:
Цитата:
я уже всю бошку об стол разбил - не пойму как это сделано.

Потому что начинать надо было с основ, а не с фреймворка.

_________________
"There is nothing better than sliding down snow and flying through the air" (с) Shane McConkey.
Lieber ein Brett am Fuß als eins vorm Kopf, aber lieber ein Brett vorm Kopf als zwei am Fuß.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Вопросы по Qt (ну и по С++ заодно)
СообщениеДобавлено: 28 окт 2011, 00:06 
Не в сети
Аватара пользователя

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

Добавлено спустя 2 часа 12 минут 46 секунд:
ё-маё, кажись мне удалось вывихнуть мозг нужным образом... тут главное понять - кто папа, а кто мама.

_________________
Мой волшебник это я сам. Всю архитектуру программы придумал лично, а ребята помогли воплотить её. Я бы и сам мог написать, но лень учить язык и его конструкции.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Вопросы по Qt (ну и по С++ заодно)
СообщениеДобавлено: 28 окт 2011, 00:53 
Не в сети
Аватара пользователя

Зарегистрирован: 16 май 2009, 12:50
Сообщения: 1530
Откуда: Россия
прог. языки: Java, C
К стати, в этих ваших плюсах нельзя что ли в конструктор к dialog передать ссылку на mainwindow, чтоб через нее обращаться к приватным полям? Так тоже удобно, но не совсем правильно.

_________________
"There is nothing better than sliding down snow and flying through the air" (с) Shane McConkey.
Lieber ein Brett am Fuß als eins vorm Kopf, aber lieber ein Brett vorm Kopf als zwei am Fuß.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 31 ]  На страницу Пред.  1, 2, 3  След.

Часовой пояс: UTC + 4 часа


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

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


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
phpBB SEO