Russian Qt Forum
Апрель 28, 2024, 13:58 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало Форум WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  
  Просмотр сообщений
Страниц: 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() что всё это действительно работает в разных потоках.
38  Qt / Вопросы новичков / Re: как рулить громкостью в qtav : Апрель 13, 2016, 21:20
Просто сказать виджету, который показывает видео, void QWidget::showFullScreen() не помогает?
39  Qt / Вопросы новичков / Re: Ошибки компиляции : Апрель 07, 2016, 15:52
какой компилятор используется?
Может буст скомпилирован не тем компилятором, с помощью кого хочешь собрать клиент?
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 мс решаем выходить ли из цикла или дальше проигрывать
    }

хыЖ чем сигналы и слоты не угодили?
Страниц: 1 2 [3] 4 5 ... 32

Страница сгенерирована за 0.146 секунд. Запросов: 23.