Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Почему не работает на другом копьютере
Форум на CrossPlatform.RU > Библиотеки > Qt > Qt Общие вопросы
Wlad
Программа прекрасно работает на копьютере где была создана!
Но на другом не работает - выдает сообжение:
Invalid variant operation
Библиотеки:
mingwm10.dll
QtCore4.dll
QtGui4.dll
были, естественно добавлены на новый комп. Что еще надо непонятно!
В программе истользуется QVariant, вот при первом же оращении к нему и выдается эта ошибка.
То есть на чужом компе не работает QVariant :(
Может кто знает, чего не хватает?

Спасибо
ViGOur
Как я понимаю, у тебя просто QVariant равен 0, потому и ругается так.
Код обращения к QVariant приведи, или проверь сам, почему такое может быть.
Wlad
Проверял. В QVariant передается строка QString.
Она точно такая же, как и на исходном компе.
molchanoviv
А показать код и ошибку можешь?
Wlad
Для опрелеленности.
Спотыкаемся на оченнь простом месте:
QString Name, ID;
.........
tableCombo->addItem(.Name,QVariant(ID));

Перед последним оперетором вставлял вывод: ID - нормальная строка!
ViGOur
Цитата(Wlad @ 9.12.2008, 14:41) *
tableCombo->addItem(.Name,QVariant(ID));
Это компилируется или ты руками написал и сделал ошибку?
Wlad
Руками.
Реально строка такая:

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"));

До второго отладочного сообщения не доходим, хотя на моем компе все работает как надо!
ViGOur
Цитата(Wlad @ 9.12.2008, 14:52) *
tableCombo->addItem(tableList[i].Name,QVariant(tableList[i].ID));
Просто смотри что я вижу в данной строчке, в качестве второго параметра ты передаешь ссылку на временный объект QVariant(tableList[i].ID), значение которого не факт, что копируется, а по завершению выполнения addItem уничтожается. Вот и получается, что в студии или в чем ты пишешь все работает, а на другом компьютере нет.

Покопай в эту сторону...
Wlad
У себя я запускал программу вне 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 !!!
ViGOur
Цитата(Wlad @ 9.12.2008, 15:33) *
Спасибо за помощь! А то я тупо смртрел на QVariant !!!
Ну так проблему еще ведь не решили! :)

Если не получится понять из-за чего и что, выложи побольше кода, попробуем вместе разобраться...

Как вариант проверь все ли в порядке у тебя с tableList, просто присвой временно левые значения...
Wlad
Закоментил заполнение комбобокса.
Увидел не заполненое окно!

Просто не понятно пока: чем отличаются 2 компа?
Экперименты пытаюсь проводить максимально чисто - даже менял названия папок, чтобы не влияли прописанные на моем
компе пути. Все равно на моем работает, на чужом нет!
ViGOur
Цитата(ViGOur @ 9.12.2008, 15:38) *
Как вариант проверь все ли в порядке у тебя с tableList, просто присвой временно левые значения...
Wlad
Пришол домой, запустил, все работает Ok!
Мой домашний и рабочий компы, отличаются от остальных, где я пробовал, тем, что на моих много чего установлено,
в часности Ms VC. Может наличие их библиотек в system32 так сказывается?
ViGOur
В таком случае посмотри с помощью Dependence walker, с какими библиотеками связано твое приложение, хотя дело думаю не в этом, а скорее всего где-то баг у тебя закрался.
Litkevich Yuriy
Цитата(Wlad @ 9.12.2008, 17:52) *
До второго отладочного сообщения не доходим
лучше используй qDebug, он тебе хоть расскажит в чем дело.
Wlad
Разобрался!
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-ы.
Но это наверное не по теме.
ViGOur
Цитата(Wlad @ 10.12.2008, 19:20) *
Могу привести много примеров, где в Builder приходилось выкручваться с ейными компонентами, а В Qt это уже заложено в Widget-ы.
Но это наверное не по теме.
Для этого можно создать тему в форуме Техника программирования. Если есть желание. ;)
Litkevich Yuriy
Цитата(ViGOur @ 10.12.2008, 23:20) *
форуме Техника программирования.
да вроде дело не в технике, а о Qt + WinAPI

П.С. может "Библиотеки->Другое"
kuler
Wlad, не спеши радоваться, еще вспомнишь билдер теплыми словами
AD
Цитата
Wlad, не спеши радоваться, еще вспомнишь билдер теплыми словами

[OFFTOP]
Есть проект, который модицифирую в Builder 5! Понятно, зависит в большей степени от программиста, а не от компилятора, но кроме мата, по поводу билдера ничего не вырывается. По сравнению с мощным Qt - это дряхлая немощная система. Глючит его по-страшному, компилирует долго. Добавить меню в билдере - это еще та песня с припевом. Настолько все криво, что ужас.
[/OFFTOP]

По теме, а можно посмотреть кусочки кода? :)
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Форум IP.Board © 2001-2024 IPS, Inc.