Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум на CrossPlatform.RU _ Qt Ввод/Вывод, Сеть. Межпроцессное взаимодействие _ qDebug() << QString

Автор: smooky 28.10.2008, 4:40

Ну это же какое-то издевательство! :blink:
Ну столько примеров понаписано по этому QT, но всё так тяжело и непривычно, кошмар какойта!!!

1. Как же вывести содержимое QString в stdout та? Ну это же ужос какойта! Мне вот ваще нафиг строки не нужны, а если и нужны, то только для вывода в дебаг... Посути, это самое важное любого стринг класса должно быть...
2. Но зато блин, есть qDebug(const char*, ...), а как из QString получить указатель на char, нигде несказано...

Кароче, кроме как такого огорода, незнаю как: qDebug(str.toString().toStdString().c_str());
Ну и нафига мне такое?! Глаза б мои этот QT не видели...

Блин, бесит, немогу!

P.S. В MFC и то лучше всё и понятней...

Автор: Litkevich Yuriy 28.10.2008, 7:21

ничего не понял. smooky, бери себя в руки и объясни толком, что тебе нужно.

Если нужна отладка, то делай так:

QString  mystr;

  mystr = "Vasja Pupkin";
  qDebug() << "My name is " << mystr;

все!

Цитата(smooky @ 28.10.2008, 7:40) *
P.S. В MFC и то лучше всё и понятней...
Цитата(smooky @ 28.10.2008, 7:40) *
qDebug(str.toString().toStdString().c_str());
Если тебя этому MFC научил, то конечно Qt осваивать будет тяжко, т.к. строку str преобразовывать к строке излишне.

Автор: smooky 28.10.2008, 8:18

1. если вот так:

QString str("Damned Qt!");
qDebug(str.toStdString().c_str()); // то это работает! благо, STL он и в Африке STL (всё ясно и понятно, та не дураки делали)

qDebug() << str; // не работает, говорит что использована но не определена: invalid use of incomplete type QDebug()


и как быть?

С incomplete class/struct - это постоянные мучения в QT - это отдельная песня (один сплошной гемор)!!! Но это ладно, я уже привык, справляюсь!

2. Но непонятно, как быть тут:

// A.h

class QProcess;

class A
{
  private:
    slots:
      void slotProcessError(QProcess::ProcessError); // в A.cpp вот на это орёт, что incomplete struct (хотя это enum)
};


3. С сигналами и слотами - там ваще засада просто! :-(

P.S. Я никак немогу врубиться, ну как такую ерунду можно навыдумывать та?! Блин, в BOOST и то всё понятней и приятней (хотя библа считается совсем не простой для освоения)...

Я не хвалю MFC, там тоже полно своей кривизны! В дизайне!

Но там по крайней мере просто и понятно! И с++! Ну тут же, уже какойта не с++, а чтото своё навыдумывали!

Автор: molchanoviv 28.10.2008, 8:19

Если тебе не нравится Qt то зачем ты его изучаешь?

1. Ты какие заголовочные файлы подключаешь?
2. Из псевдокода мало что понятно, но все-же: лучше пока напиши #include <QProcess> вместо class QProcess. будешь немного лучше понимать Qt будешь писать так. а пока лучше последуй моему совету.
3. А что не понятно с сигналами и слотами? Там же все элементарно.

Да литература которую я советую тебе почитать: Бланшет и Саммерфилд "Программирование GUI на С++" и Макс Шлее "Профессиональное программирование на С++ с использованием Qt4"

Автор: Litkevich Yuriy 28.10.2008, 8:40

Цитата(smooky @ 28.10.2008, 11:18) *
qDebug() << str; // не работает, говорит что использована но не определена: invalid use of incomplete type QDebug()
кто использована но не определена? Ты можешь конкретное сообщение об ошибке привести?

Цитата(smooky @ 28.10.2008, 11:18) *
void slotProcessError(QProcess::ProcessError); // в A.cpp вот на это орёт, что incomplete struct (хотя это enum)
А я вот не вижу здесь ни какого enum, счего ты взял что это enum. Приведи пример в котором выдается ошибка, я думаю Qt здесь даже близко не причем, все дело в твоих знаниях С++

Цитата(smooky @ 28.10.2008, 11:18) *
3. С сигналами и слотами - там ваще засада просто! :-(
для этого троли написали http://crossplatform.ru/documentation/qtdoc4.3/tutorial.php, пройди его и вопросы начального уровня отпадут.

Цитата(smooky @ 28.10.2008, 11:18) *
P.S. Я никак немогу врубиться, ну как такую ерунду можно навыдумывать та?! Блин, в BOOST и то всё понятней и приятней (хотя библа считается совсем не простой для освоения)...

Я не хвалю MFC, там тоже полно своей кривизны! В дизайне!
может тебе стоило изучать wxWidgets, MFC-подобная библиотека.
Даже
 BEGIN_MESSAGE_MAP
        MESSAGE_HANDLER(WM_DRAWITEM,TMessage,DrawItem)
        MESSAGE_HANDLER(WMESPA_NOTIFY,TMessage,MyNotify)
END_MESSAGE_MAP(Form)

есть точь в точь как в MFC

Автор: smooky 28.10.2008, 9:05

да я бы и не изучал Qt, если бы не приходилось чужой код доделывать, людей, которые недоступны... и непонятно... будут ли вообще доступны... :(

знаний по с++ уверяю тебя достаточно! :-) Мне их вполне хватает, чтобы даже статьи в известный журнал писать! просто в Qt простые вещи сделаны либо слишком сложно, либо далеко неочевидно... Вот и вопрос у меня, зачем так через зад та делать?

1. ладно, с qDebug проехали... спасибо за ответы! но слишком много времени приходится затрачивать на такие простые вещи... (что собственно и вызывает моё недовольство в Qt)... тут и так всё через зад...
2. QProcess вызывает QProcess::error(QProcess::ProcessError error) когда происходит ошибка в процессе (ну или как там принято называть Сигнал)

CODE
// A.h

class QProcess; // forward

class A
{
private:
QProcess * process_;
slots:
// буду связывать с QProcess::error(...)
void slotProcessError(QProcess::ProcessError); // incomplete enum type used

// A.cpp

A::A()
{
process_ = new QProcess(this);
connect(process, SIGNAL(error(QProcess::ProcessError)), this, SLOT(slotProcessError(QProcess::ProcessError)));
}

A::slotProcessError(QProcess::ProcessError e)
{
UNUSED_ALWAYS(e); // простой макрос, чтобы варнинга не было
}

A.h:88: error: 'struct QProcess::ProcessError' not declared
moc_A.cpp: In member function 'virtual int A::qt_metacall(QMetaObject::Call, int, void**)':
moc_A.cpp:78: error: expected type-specifier
moc_A.cpp:78: error: expected `>'
moc_A.cpp:78: error: expected `('
moc_A.cpp:78: error: 'QProcess' incomplete type used.....
moc_A.cpp:78: error: expected primary-expression before ')' token

Автор: AD 28.10.2008, 9:13

Такое ощущение, что <QProcess> забыл подключить! Проверь подключение этого файла.

Автор: ViGOur 28.10.2008, 9:21

smooky, после MFC мне тоже было сложновато переключится на Qt, но когда поработал с ним, то стал считать, что Qt лучше и продуманней чем MFC. Но это только вступление... :)

Скажи, а откуда в A.h может знать, что из себя представляет QProcess::ProcessError, если у тебя класс QProcess только объявлен? ;)

Автор: Litkevich Yuriy 28.10.2008, 9:24

Цитата(ViGOur @ 28.10.2008, 12:21) *
Скажи, а откуда в A.h может знать, что из себя представляет QProcess::ProcessError, если у тебя класс QProcess только объявлен?
да ему уже все про это сказали:
Цитата(molchanoviv @ 28.10.2008, 11:19) *
лучше пока напиши #include <QProcess> вместо class QProcess.
Цитата(Litkevich Yuriy @ 28.10.2008, 11:40) *
А я вот не вижу здесь ни какого enum, счего ты взял что это enum.
Цитата(AD @ 28.10.2008, 12:13) *
Такое ощущение, что <QProcess> забыл подключить! Проверь подключение этого файла.


А он не в какую :(

Автор: Гость 28.10.2008, 9:47

Не, не могу сегодня уже решать сие задачу! 2-ое суток неспамши за компом... не могу сообразить...

Временно пока сделал заглуху, на чистом C написал функцию... быстро и работает...

Но вывод сделал один: карочи, кто хочет осложнить себе жизнь и другим, начните изучать и применять Qt!!! Гемор и бессоные ночи вам обеспечены!

Автор: Litkevich Yuriy 28.10.2008, 9:54

Цитата(Гость_Гость_* @ 28.10.2008, 12:47) *
Но вывод сделал один: карочи, кто хочет осложнить себе жизнь и другим, начните изучать и применять Qt!!! Гемор и бессоные ночи вам обеспечены!
на этом тему и закроем

Форум Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)