LINUX.ORG.RU

Qt & c++stdlib


0

0

Вопрос такой: насколько допустимо (расово верно?, православно?) с точки зрения архитектуры использовать в проекте на Qt классы стандартной библиотеки c++? Мне, например, больше по душе stl-евские контейнеры/алгоритмы и Qt-шная QString. Но QString напрямую не работает с std::cin && std::cout, приходится извращаться (или я чего-то не вижу)? Насколько Qt может быть разбавлен c++stdlib (или наоборот)?

>приходится извращаться

Зачем извращаться?

QByteArrayoutput = new QByteArray;
QProcess proc = new QProcess(this);

connect(proc,SIGNAL(readyReadStandardOutput()), SLOT(readStdout()));

void UI::readStdout()
{
    *output = proc->readAllStandardOutput();
}

ahonymous
()
Ответ на: комментарий от ahonymous

недокопипастил

QByteArrayoutput ---> QByteArray *output
QProcess proc ---> QProcess *proc

ahonymous
()
Ответ на: комментарий от ahonymous

> Зачем извращаться?

Хм... А это что, не извращение? Потом мне ещё этот QByteArray перегонять во что-нить вменяемое. Qt-шный механизм "сигнал-слот" иногда удобен (в основном, при работе с гуём), но зачастую сильно запутывает и усложняет код. По моему мнению, разумеется.

one_more_hokum ★★★
() автор топика
Ответ на: комментарий от ahonymous

> new QByteArray

Пробел в матчасти. QByteArray и прочие Qt контейнеры - Implicitly Shared, это и есть указатели, выделять их через new не нужно.

По теме. Qt и STL не подходят для разговоров "по душе", "не по душе". Заменить Qt-контейнеры на STL не получится хотя бы потому что последние не потокобезопастны. Простая конструкция:

connect( threadOne, SIGNAL(finished(QByteArray)), threadTwo, SLOT(finishedSlot(QByteArray)) );

или

threadOne->byteArray = threadTwo->byteArray;

на STL обрастёт горой сопутствующего кода для синхрониации и ошибками, будет тормозить и есть память для глубокого копирования. В Qt же это - атомарная операция: потокобезопастно, не есть CPU, не ест памяти, занимает одну строчку, работает на всех платформах. На этом строится вся Qt библиотека.

Советую заглянуть в документацию, там хорошо всё расписано.

Dendy ★★★★★
()

> Но QString напрямую не работает с std::cin && std::cout, приходится извращаться (или я чего-то не вижу)?

Вы не увидели qPrintable().

Dendy ★★★★★
()

> Но QString напрямую не работает с std::cin && std::cout, приходится извращаться (или я чего-то не вижу)?

там есть методы fromStdString и toStdString

> Насколько Qt может быть разбавлен c++stdlib (или наоборот)?


Как хочешь, так и разбавляй.

В доках пишут, что использование stl с qt кошерно.

gaa ★★
()
Ответ на: комментарий от Dendy

Да, забыл, ещё вы не увидели:

bool QFile::open( FILE * fh, OpenMode mode )

Dendy ★★★★★
()

а чем тебя собственно кутешные аналоги не устроили?

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.