Просмотр сообщений
|
Страниц: 1 2 [3] 4 5 ... 32
|
31
|
Qt / Многопоточное программирование, процессы / Re: Не отрабатывает сигнал если для синхронизации используется мьютекс
|
: Июнь 17, 2016, 01:13
|
потому что у тебя слот releasemutex пытается вызваться в контексте event loop'а заблокированного потока. Если переписать строчку C++ (Qt) connect(&finisher, SIGNAL(finished()), &worker, SLOT(releasemutex()));
на C++ (Qt) connect(&finisher, SIGNAL(finished()), &worker, SLOT(releasemutex()), Qt::DirectConnection);
то будет ожидаемое тобой поведение.
|
|
|
32
|
Qt / Общие вопросы / Re: чем можно записать аудио в файл? (НЕ С МИКРОФОНА!!!)
|
: Июнь 16, 2016, 21:36
|
Из QMediaResourse достаешь все данные для заголовка. Запись заголовка нужно делать самому в Qt нет готового функционала.
это другое, я же тут файл переписываю просто вот смотри import requests,io,urllib2 url="http://mp3.stream.tb-group.fm/tb.mp3?" response = urllib2.urlopen(url) CHUNK = 16 * 1024 with open("out_.mp3","wb") as f: while True: try: chunk = response.read(CHUNK) if not chunk: break f.write(chunk) except KeyboardInterrupt: f.close() break отлично работает на питоне, на QT у меня по сути тот же код, По сути тот же код в Qt тоже работает: main.cpp C++ (Qt) #include <QCoreApplication> #include <QNetworkAccessManager> #include <QFile> #include <QDebug> #include <QThread> #include <QNetworkReply> #include <QNetworkRequest> class KeyboaradHandler : public QObject { Q_OBJECT public: Q_INVOKABLE void start() { if (QThread::currentThread() != thread()) { QMetaObject::invokeMethod(this, "start", Qt::QueuedConnection); return; } getchar(); emit done(); } signals: void done(); }; class Handler : public QObject { Q_OBJECT public: Handler() : mKeyboard(new KeyboaradHandler()), mFile(nullptr) { connect(mKeyboard, &KeyboaradHandler::done, this, &Handler::onDone, Qt::QueuedConnection); QNetworkRequest req(QUrl::fromUserInput("http://mp3.stream.tb-group.fm/tb.mp3?")); QNetworkReply *reply = mNetworkManager.get(req); connect(reply, &QNetworkReply::readyRead, this, &Handler::onReadyRead); } ~Handler() { if (mFile) { mFile->close(); delete mFile; } mKeyboard->deleteLater(); mThread.quit(); mThread.wait(); } void onDone() { qDebug() << "finish...."; qApp->quit(); } void onReadyRead() { if (!mFile) { mFile = new QFile("test.mp3"); if (!mFile->open(QIODevice::WriteOnly)) { qDebug() << "unable to open file"; qApp->quit(); return; } } else if (!mThread.isRunning()) { qDebug() << "let's go!"; startWaitAnyKey(); } QNetworkReply *r = qobject_cast<QNetworkReply*>(sender()); mFile->write(r->readAll()); } void startWaitAnyKey() { mThread.start(); mKeyboard->moveToThread(&mThread); mKeyboard->start(); } signals: private: QNetworkAccessManager mNetworkManager; QThread mThread; KeyboaradHandler *mKeyboard; QFile *mFile; }; int main(int argc, char *argv[]) { QCoreApplication a(argc, argv); Handler h; return a.exec(); } #include "main.moc"
|
|
|
33
|
Qt / Вопросы новичков / Re: ошибки подключения к SQLite
|
: Июнь 06, 2016, 22:04
|
Я на Java под андроид пишу. А на Qt сервак делаю под винду на котором SQLite используется. А смотри еще такой вопрос, когда ОС Windows переходит в спящий режим то все работающие приложения, все потоки тоже засыпают да? А если у меня работает сервер TCP на Windows, то в спящем режиме он перестанет слушать соединения? А как тогда вывести систему или запретить ей уходить в спящий режим, пока работает сервер? Какие есть средства Qt для этого?
Может стоило и сервак на яве писать? =) Но поводу спящего режима ответили уже, средствами ОС это делается, не Qt.
|
|
|
34
|
Qt / Вопросы новичков / Re: ошибки подключения к SQLite
|
: Июнь 05, 2016, 00:18
|
ты в void TaskWindow::on_click() открываешь и не закрываешь соединение с БД. в конце этого метода вызывай db->dataclose(); Ну и вообще в теории можно один раз в начале работы программы открыть соединение с БД, и в конце работы его закрыть, а не закрывать/открывать на каждый чих. И еще в глаза бросилось куча new и ни одного delete. C C# что ли пришёл? =)
|
|
|
35
|
Разное / Говорилка / Re: [АРХИВ] Вопросы по QtCreator.
|
: Июнь 03, 2016, 17:09
|
Просто обычно проекты минимум из 10-50 файликов. Чтобы разобраться в тонкостях, нужно неделю потратить Хотя в простых проектах, не спорю, иногда проще переписать. Какие то совсем маленькие проектики =)
|
|
|
36
|
Qt / Вопросы новичков / Re: Вывод в консоль из потока (TcpServer) (HELP)
|
: Май 24, 2016, 21:34
|
Хотя, нет сделал ошибку в коде уже нашёл, но в новом потоке всё равно ничего не выводит Всё то-же самое. Давай полностью проекты клиента и сервера в студию, очевидно что ты что то делаешь не так, вывод в консоль блокироваться не должен.
|
|
|
37
|
Qt / Вопросы новичков / Re: Вывод в консоль из потока (TcpServer) (HELP)
|
: Май 23, 2016, 12:41
|
Cудя по всему у тебя сервер(а) стартует в основном потоке, и так как qtin(...) блокирует поток ожиданием ввода с консоли, тупо дело до void server1::incomingConnection(qintptr socketDescriptor) не доходит. Попробуй перенести сервер(а) в отдельный поток, в принципе в том же дополнительном потоке можно и клиентов обрабатывать, не городя поток на соединение. Ну и проверяй через QThread::currentThread() что всё это действительно работает в разных потоках.
|
|
|
40
|
Qt / Вопросы новичков / Re: Работа с bzip в Qt
|
: Апрель 06, 2016, 08:38
|
Для начала стоит почитать про подключение сторонних библиотек вообще. Быстрый гугл дал ответ, что в ubuntu сия либа присутствует (пакет "libbz2-dev"), под виндой недолго собрать для mingw, просто тупо командой make в окружении msys(2). А подключение в pro файле: -Lpath/to/lib -lbz2 INCLUDEPATH += path/to/lib/headers
|
|
|
41
|
Qt / Model-View (MV) / Re: Создание модели на основе QAbstractTableView
|
: Март 30, 2016, 09:57
|
А как выделять строки через делегат? Подсунул свой делегат, чтобы изображения центрировало, а выделение не работает.
если достаточно дефолтного выделения, достаточно в начале void paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const override; поместить следующий код: C++ (Qt) QStyleOptionViewItem opt = option; initStyleOption(&opt, index); const QWidget *widget = option.widget; QStyle *style = widget ? widget->style() : QApplication::style(); style->drawPrimitive(QStyle::PE_PanelItemViewItem, &opt, painter, widget);
Если хочется своего выделения, обрати внимание на переменную QStyle::State QStyleOption::state ( option.state)
|
|
|
42
|
Программирование / Общий / Re: Синхронизация проигрывания звука между компом и устройсвом
|
: Январь 26, 2016, 15:34
|
На мой неискушенный контроллерами взгляд - только увеличить точность. Компьютер в этом деле может лишь только подстраиваться постфактум, у программ на нём тоже не особо точное время.
Оно понятно, что подстраиваться постфактум, вопрос как это правильно делать, и, желательно, без дополнительного управления устройством, как это сделано сейчас. PS а можно привести пример такой системы, задача интересная, но практического применения не вижу Есть "мастер" плата, в которую подключаются через общую шину произвольные устройства, которые могут работать в том числе и со звуком. Устройства в том числе и управляющие, через декодирование звукового сигнала могут делать разные вещи, включать оповещение, вызывать милицию, транслировать тот звук, что в шине на громкоговорители и т.п. А вот эта задача просто для удобной отладки, что же в данный момент в шине твориться ).
|
|
|
43
|
Программирование / Общий / Синхронизация проигрывания звука между компом и устройсвом
|
: Январь 26, 2016, 10:20
|
Доброго времени суток.
Есть устройство со своей внутренней звуковой шиной на 24000Гц, которое, ко всему прочему, эту шину по UDP транслирует наружу. Задача проиграть звук с этой шины на компе. На первый взгляд всё просто, настраиваем какую-либо библиотеку, которая умеет играть звук, на 24кГц (в моём случае это portaudio), принимаем пакеты, кешируем и играем их. Изи. Но проблема в том, что устройство тактируется от внутреннего кварца на микроконтроллере, соответственно 24кГц очень не точные,и за 5-10 секунд звук убегает или отстаёт на 2-3 мс. Интересует есть ли какое более менее стандартное решение, что бы это дело всё синхронизировать? Пока сделан костыль - добавлены команды, которые уменьшают / увеличивают скорость шины, и этими командами приложение на компе подстраивает скорость шины под себя. Работает, но как по мне не очень красивое решение.
|
|
|
44
|
Qt / 2D и 3D графика / Re: Размеры прямоугольника в который вписана дуга.
|
: Январь 08, 2016, 12:54
|
Подскажите. Как рисовать в qgraphicsscene используя Qpainter.
Никак. Оно не отнаследовано от QPaintDevice. Но на сцене можно размещать QGraphicsItem'ы, вот на них уже можно рисовать QPainter'ом, смотри в сторону C++ (Qt) void QGraphicsItem::paint ( QPainter * painter, const QStyleOptionGraphicsItem * option, QWidget * widget = 0 ) [pure virtual]
|
|
|
45
|
Qt / Мультимедиа / Re: QAudioOutput и waitForBytesWritten
|
: Январь 08, 2016, 12:06
|
Пытаюсь в бесконечном цикле опрашивать QAudioOutput::bytesFree(), и если буфер пуст, пишу туда данные, но звук получается с прерываниями.
Батарейку так посадишь быстро скорее всего. Прошу помощи, кто работал с QAudioOutput без сигнал/слотов
Если хочешь работать в синхронном режиме - можно попробовать использовать QEventLoop, псевдокод: QAudioOutput *audioOutput;
QEventLoop el; // после обработки аудио данных выход из евент лупа connect(audioOutput, SIGNAL(notify()), &el, SLOT(quit())); // 40 миллисекунд интервал audioOutput->setNotifyInterval(40); QIODevice *ioDev = audioOutput->start(); while (true) { // пишем аудиоданные длинной 40 мс ioDev->write(audioDataLenghtOf40Ms); // запускаем евентлуп el.exec(); // .. по прошествии 40 мс решаем выходить ли из цикла или дальше проигрывать }
хыЖ чем сигналы и слоты не угодили?
|
|
|
|
|