Программа прекрасно работает на копьютере где была создана!
Но на другом не работает - выдает сообжение:
Invalid variant operation
Библиотеки:
mingwm10.dll
QtCore4.dll
QtGui4.dll
были, естественно добавлены на новый комп. Что еще надо непонятно!
В программе истользуется QVariant, вот при первом же оращении к нему и выдается эта ошибка.
То есть на чужом компе не работает QVariant
Может кто знает, чего не хватает?
Спасибо
Как я понимаю, у тебя просто QVariant равен 0, потому и ругается так.
Код обращения к QVariant приведи, или проверь сам, почему такое может быть.
Проверял. В QVariant передается строка QString.
Она точно такая же, как и на исходном компе.
molchanoviv
9.12.2008, 14:37
А показать код и ошибку можешь?
Для опрелеленности.
Спотыкаемся на оченнь простом месте:
QString Name, ID;
.........
tableCombo->addItem(.Name,QVariant(ID));
Перед последним оперетором вставлял вывод: ID - нормальная строка!
Цитата(Wlad @ 9.12.2008, 14:41)
tableCombo->addItem(.Name,QVariant(ID));
Это компилируется или ты руками написал и сделал ошибку?
Руками.
Реально строка такая:
QMessageBox::information(0,QObject::tr("Transform"),tableList[i].ID);
tableCombo->addItem(tableList[i].Name,QVariant(tableList[i].ID));
QMessageBox::information(0,QObject::tr("Transform"),QObject::tr("End addItem"));
До второго отладочного сообщения не доходим, хотя на моем компе все работает как надо!
Цитата(Wlad @ 9.12.2008, 14:52)
tableCombo->addItem(tableList[i].Name,QVariant(tableList[i].ID));
Просто смотри что я вижу в данной строчке, в качестве второго параметра ты передаешь ссылку на временный объект QVariant(tableList[i].ID), значение которого не факт, что копируется, а по завершению выполнения addItem уничтожается. Вот и получается, что в студии или в чем ты пишешь все работает, а на другом компьютере нет.
Покопай в эту сторону...
У себя я запускал программу вне IDE, и все Ok!
Но на всякий случай попробовал так, как советовал:
QVariant varStr;
for(int i=0; i < tableList.size(); ++i)
{
varStr = QVariant(tableList[i].ID);
QMessageBox::information(0,QObject::tr("Transform"),varStr.toString());
tableCombo->addItem(tableList[i].Name,varStr);
QMessageBox::information(0,QObject::tr("Transform"),QObject::tr("End addItem"));
}
До второго QMessageBox все равно не доходит. Зато теперь видно, что QVariant здесь не причем!!!
Первое сообщение то ЕСТЬ!
Значит загвоздка в этой строке :
tableCombo->addItem(tableList[i].Name,varStr);
Попробую посмотреть что происходит с QComboBox *tableCombo;
Проблема в том, что все это происходит в конструкторе. Окна я еще не вижу!
Попробую сделать так, чтобы увибеть окно, хтябы и не заполненное.
Спасибо за помощь! А то я тупо смртрел на QVariant !!!
Цитата(Wlad @ 9.12.2008, 15:33)
Спасибо за помощь! А то я тупо смртрел на QVariant !!!
Ну так проблему еще ведь не решили!
Если не получится понять из-за чего и что, выложи побольше кода, попробуем вместе разобраться...
Как вариант проверь все ли в порядке у тебя с tableList, просто присвой временно левые значения...
Закоментил заполнение комбобокса.
Увидел не заполненое окно!
Просто не понятно пока: чем отличаются 2 компа?
Экперименты пытаюсь проводить максимально чисто - даже менял названия папок, чтобы не влияли прописанные на моем
компе пути. Все равно на моем работает, на чужом нет!
Цитата(ViGOur @ 9.12.2008, 15:38)
Как вариант проверь все ли в порядке у тебя с tableList, просто присвой временно левые значения...
Пришол домой, запустил, все работает Ok!
Мой домашний и рабочий компы, отличаются от остальных, где я пробовал, тем, что на моих много чего установлено,
в часности Ms VC. Может наличие их библиотек в system32 так сказывается?
В таком случае посмотри с помощью Dependence walker, с какими библиотеками связано твое приложение, хотя дело думаю не в этом, а скорее всего где-то баг у тебя закрался.
Litkevich Yuriy
9.12.2008, 18:00
Цитата(Wlad @ 9.12.2008, 17:52)
До второго отладочного сообщения не доходим
лучше используй
qDebug, он тебе хоть расскажит в чем дело.
Разобрался!
Invalid мне выдовал не QVariant а виндовый VARIANT. Дело в том, что КомбоБоксы я заполняю информацией,
полученной по СОМ интерфейсу из чужой программы. В Qt при выполнении addItem высылается сигнал currentIndexChanged(int), его то я и использоапл для дальнейшего заполнения формы получая информацию по СОМ интерфейсу. Здесь я использовал VARIANT.
Когда я писал этот участок кода (это у меня отдельный класс) у меня сразу возник вопрос - как передать целое число в VARIANT?
Здесь много вариантов: VT_I2, VT_I4, VT_INT. До этого, я много лет писал анологичные программы на Builder, и все отлично работало! Потому как в Builderе есть свой Variant. Его я в анологичных случаях и использовал. Поэтому я проверил какой тип выставляет Борланский Variant. Написал махонькою программку и посмотрел. Variant мне выдал тип VT_INT. пдставил, проверир, все Ok! Но проверял то я на своем компе!
Дело в том, что при установке Builder, он заменяет библиотеку OLEAUT32.DLL, где как раз находится библиотека работы с VARIANT, на свою (у нее другая длина и дата), поэтому, у меня все и работало, а на других компах нет!
Интересный факт: там, где OLEAUT32 заненена можно при передачи целого числа в VARIANT указывать как VT_I4, так и VT_INT,
все работает! если же стоит виндовая DLLка - проходит только VT_I4.
Так что тема закрыта. Большое спасибо за помощь!
К слову. Давно хотел уйти с Builder, долго не мог найти замену. Но, наконец встретил Qt. Отличная библиотека! Очень продуманная!
Могу привести много примеров, где в Builder приходилось выкручваться с ейными компонентами, а В Qt это уже заложено в Widget-ы.
Но это наверное не по теме.
Цитата(Wlad @ 10.12.2008, 19:20)
Могу привести много примеров, где в Builder приходилось выкручваться с ейными компонентами, а В Qt это уже заложено в Widget-ы.
Но это наверное не по теме.
Для этого можно создать тему в форуме
Техника программирования. Если есть желание.
Litkevich Yuriy
10.12.2008, 20:32
Цитата(ViGOur @ 10.12.2008, 23:20)
форуме Техника программирования.
да вроде дело не в технике, а о Qt + WinAPI
П.С. может "Библиотеки->Другое"
Wlad, не спеши радоваться, еще вспомнишь билдер теплыми словами
Цитата
Wlad, не спеши радоваться, еще вспомнишь билдер теплыми словами
[OFFTOP]
Есть проект, который модицифирую в Builder 5! Понятно, зависит в большей степени от программиста, а не от компилятора, но кроме мата, по поводу билдера ничего не вырывается. По сравнению с мощным Qt - это дряхлая немощная система. Глючит его по-страшному, компилирует долго. Добавить меню в билдере - это еще та песня с припевом. Настолько все криво, что ужас.
[/OFFTOP]
По теме, а можно посмотреть кусочки кода?
Для просмотра полной версии этой страницы, пожалуйста,
пройдите по ссылке.