crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

posi4
  опции профиля:
сообщение 19.6.2009, 14:12
Сообщение #1


Студент
*

Группа: Участник
Сообщений: 52
Регистрация: 24.4.2009
Пользователь №: 707

Спасибо сказали: 0 раз(а)




Репутация:   0  


Пишу в QtCreatore, вот такая вот функция main
int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MinotourGUI w;
    QextSerialPort* port = new QextSerialPort("COM1");
    port->setBaudRate(BAUD115200);
    port->setFlowControl(FLOW_OFF);
    port->setDataBits(DATA_8);
    port->setParity(PAR_NONE);
    port->setStopBits(STOP_1);
    port->open(QIODevice::ReadWrite);
    if(!(port->lineStatus() & LS_DSR))
    {
        QMessageBox::information(0,"Warning","Device is not turned on");
    }
    transmitter* tm = new transmitter(port);
    tm->connect(port, SIGNAL(readyRead()), tm, SLOT(recive()));
    SerialThread * thread = new SerialThread(port);
    thread->start();
    w.show();
    return a.exec();
}


вот сам класс:

class transmitter : public QObject
{

    Q_OBJECT

    QextSerialPort * port;

public:
    transmitter(QextSerialPort * port, QObject* parent = 0);
    quint8 GetControlSum(QByteArray, int);
    void WriteCom(char*);
private slots:
    void recive();
};

void transmitter::recive()
{
    int bytesavailable = port->bytesAvailable();
    char* data = new char[bytesavailable];
    port->read(data, bytesavailable);
    QFile file("file.dat");
    file.open(QFile::WriteOnly);
    file.write(data, bytesavailable);
    file.close();
}


И теперь кто-нибудь подскажите, почему у меня не получается ничего получить в файл?
Подозреваю что сигнал/слот не работают?
Если же просто методом воспользоваться, данные читаются и записываются в файл!
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
 
Начать новую тему
Ответов
igor_bogomolov
  опции профиля:
сообщение 22.6.2009, 11:49
Сообщение #2


Профессионал
*****

Группа: Сомодератор
Сообщений: 1215
Регистрация: 22.3.2009
Из: Саратов
Пользователь №: 630

Спасибо сказали: 235 раз(а)




Репутация:   29  


Цитата(posi4 @ 22.6.2009, 12:11) *
Да теперь работает, но почему-то файл записывается нулевого размера! =0
Creator здесь ни причем.
У меня у самого была подобная проблема (кстати, и задача почти такая же стояла). Но связано это было с неправильной работой с самим прибором, и настройкой порта. У меня устройство USB, правда, но работаю с ним через USB_COM, так что разницы нет.

Могу поделиться исходничками, мне не жалко. Там нет ничего секретного. :)

Вот как у меня осуществлялась инициализация порта

Раскрывающийся текст
void MainWindow::createSerialPort() {
    isFindPort = false;
    QList<QextPortInfo> ports = QextSerialEnumerator::getPorts();
    textEdit->append(tr("Поиск USB Serial Port..."));
    textEdit->append("=========================================");
    for (int i = 0; i < ports.size(); i++) {
        if(ports.at(i).friendName.contains("USB Serial Port")) {
            textEdit->append(QString("port name: %1").arg(ports.at(i).portName.left(4)));
            textEdit->append(QString("friendly name: %1").arg(ports.at(i).friendName));
            textEdit->append(QString("physical name: %1").arg(ports.at(i).physName));
            textEdit->append(QString("enumerator name: %1").arg(ports.at(i).enumName));
            textEdit->append("=========================================");
            isFindPort = true;
            portName = ports.at(i).portName.left(4);
        }
    }
    if(!isFindPort) {
        portName.clear();
        textEdit->append(tr("USB Serial Port не обнаружен."));
        textEdit->append("=========================================");
        return;
    }

    if(!isCreatePort) {
        isCreatePort = true;
        port = new QextSerialPort(portName, QextSerialPort::EventDriven);

        threadPort = new ThreadSerialPort(port);
        connect(threadPort, SIGNAL(displayMessage(const QString &)), SLOT(displayMessage(const QString &)));
        connect(threadPort, SIGNAL(cancelReadEnergo(const QByteArray &)), SLOT(saveData(const QByteArray &)));
    }

    port->setBaudRate(BAUD115200);
    port->setFlowControl(FLOW_HARDWARE);
    port->setParity(PAR_NONE);
    port->setDataBits(DATA_8);
    port->setStopBits(STOP_1);
    port->setTimeout(500);
    port->setDtr(false);
    port->setRts(false);

    port->readAll();

    textEdit->append(tr("USB Serial Port подключен."));
    textEdit->append("=========================================");
}
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Сообщений в этой теме


Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0


RSS Рейтинг@Mail.ru Текстовая версия Сейчас: 17.3.2025, 10:54