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

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1] 2 3   Вниз
  Печать  
Автор Тема: Начало работы с Qt  (Прочитано 18444 раз)
Day
Частый гость
***
Offline Offline

Сообщений: 290


Просмотр профиля
« : Январь 13, 2012, 10:34 »

приобрел книжицу Макс Шлее Qt4.5+дистрибутив с примерами.
Начал примерчики делать. Поздоровался. Сделал 2 виджетика "сигнал-слот" Все путем.
Перешел к части 5.
Код:
#include <QtGui>
// --------------------------------
int main(int argc, char** argv)
{
    QApplication app(argc, argv);
    QWidget      wgt;

    QWidget* pwgt2 = new QWidget(&wgt);
    QPalette pal2;
    pal2.setBrush(pwgt2->backgroundRole(), QBrush(QPixmap("stone.jpg")));
    pwgt2->setPalette(pal2);
    pwgt2->resize(100, 100);
    pwgt2->move(75, 75);
    pwgt2->setAutoFillBackground(true);

    wgt.resize(200, 200);
    wgt.show();

    return app.exec();
}
По идее должен появляться квадрат, усеянный камнями. Нету. Голый wgt
stone.jpg в папке присутствует. В чем дело?
Там еще был pwgt1 - голубой квадрат (я его выкинул из кода) - вот он появлялся.
Почему принимаются картинки только в стиле Малевича? Улыбающийся
В той же главе 5 еще 2 проекта - MouseCursor, ScrollArea использующие картинки.
Тоже картинок нет.
Компутер - Настольный PC, Windows XP
Записан
Bepec
Гость
« Ответ #1 : Январь 13, 2012, 10:44 »

Может у тебя просто палитра удаляется при выходе из процедуры? Веселый

Создай её тоже динамически, как и виджет, аля

Код:
 QPalette* pal2 = new QPalette();
   pal2->setBrush(pwgt2->backgroundRole(), QBrush(QPixmap("stone.jpg")));

И посмотри что получится. Улыбающийся

ждусь результатов.
Записан
andrew.k
Гость
« Ответ #2 : Январь 13, 2012, 11:48 »

в какой папке у тебя присутствует stone.jpg? Там где исходники?
Обрати внимание откуда запускается твоя программа.
Записан
stima
Гость
« Ответ #3 : Январь 13, 2012, 11:49 »

Создание обьекта динамически или статически тут роли совершенно не играет.

Код:
#include <QtGui/QApplication>
#include <QtGui>

int main(int argc, char** argv)
{
    QApplication app(argc, argv);
    QPixmap pixmap;

    qDebug() << "By relative path. Is load: " << pixmap.load("myFile.jpg");
    qDebug() << "By absolute path. Is load: " << pixmap.load("C:\\MyDir\\myFile.jpg");

    return app.exec();
}

И вывод в студию.
Записан
Bepec
Гость
« Ответ #4 : Январь 13, 2012, 12:13 »

Приведенный пример полностью рабочий Улыбающийся

Сделай проще - картинку скопируй в корень диска "С:\" допустим.
И путь к ней укажи полный "С:\stone.jpg".

« Последнее редактирование: Январь 13, 2012, 13:03 от Bepec » Записан
andrew.k
Гость
« Ответ #5 : Январь 13, 2012, 12:26 »

Ошибку свою понял, заметив main Подмигивающий
А сначала в приведенном коде ты не заметил main?  Смеющийся

... но main тут тоже не при чем. "А мужики-то не знали" )
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #6 : Январь 13, 2012, 12:41 »

Пиплы.... Дружно рубим свой офтоп.
« Последнее редактирование: Январь 13, 2012, 12:47 от Пантер » Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
andrew.k
Гость
« Ответ #7 : Январь 13, 2012, 12:44 »

Да. Видимо у меня аллергия на херню.
Может ты еще к ТС домой приедешь и за него все сделаешь?

Суть проблемы какбэ сразу очевидна (надеюсь : )

Я бы мог написать "скопируй файл в каталог сборки", он бы это сделал и может и не понял ничего и на этом успокоился и забыл через 5 минут.
А так бы он повозился немного, раз сразу не получилось, и что-то понял, так как проблема не стоит и выеденного яйца.

Это ^ тоже офтоп?
« Последнее редактирование: Январь 13, 2012, 12:53 от andrew.k » Записан
Day
Частый гость
***
Offline Offline

Сообщений: 290


Просмотр профиля
« Ответ #8 : Январь 13, 2012, 12:58 »

Ребята, не ссорьтесь, пожалуйста, а то мне как-то неудобно. Только пришел на форум, и тут такую бучу поднял!
Приведенный пример полностью рабочий Улыбающийся
Сделай проще - картинку скопируй в корень диска "С:\" допустим.
И путь к ней укажи полный "С:\stone.jpg".
Вот так все работает! Спасибо!
в какой папке у тебя присутствует stone.jpg? Там где исходники?
Обрати внимание откуда запускается твоя программа.
Да! Там где исходники. И exe там же!
Так какую папку Qt считает текущей? Какую-то свою? И как тогда понять папку экзэшника? В Borland Builder я знаю как, есть там такая АПИ, не помню навскидку как зовут.
А если под Линуксом - тогда как? Это же все должно быть кроссплатформенно, за этим и шел. Там даже палки не такие!
ЗЫ. Запускал прямо из Qt. Пока с ДЛЛ не разобрался.
Пока топчу первые грабли.
Записан
Bepec
Гость
« Ответ #9 : Январь 13, 2012, 13:02 »

Код:
QApplication::applicationDirPath () 
вернет тебе папку, откуда запущена программа Улыбающийся

А насчёт бучи не беспокойся. Это просто андрев.к нервничает при виде меня ^^

PS andrew.k чтобы узнать и понять проблему с путями, нужно сначала её решить. Можно одному, а можно спросить. В 1 случае зазря потеряешь время(1 функция в глубинах qApplication), во 2 экономия времени Улыбающийся
« Последнее редактирование: Январь 13, 2012, 13:05 от Bepec » Записан
Bepec
Гость
« Ответ #10 : Январь 13, 2012, 13:15 »

stima, а если пользоваться VS2008, то она сначала ищет в папке с иходниками, а только после этого в дебаге (ну релиз соответственно сам у себя ищет, никуда не заглядывая.)
Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4747



Просмотр профиля WWW
« Ответ #11 : Январь 13, 2012, 13:28 »

для хранения разнообразных ресурсов можно (и лучше?) пользоваться файлом ресурсов *.qrc. Это обычный текстовый файл, в который добавляются пути к файлам (для удобного добавления с Qt идёт небольшая утилита). зато потом в коде пути к ним можно использовать относительные, например: QPixmap(":/stone.jpg").

В книжке наверное дальше об этом будут рассказывать Улыбающийся
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
Day
Частый гость
***
Offline Offline

Сообщений: 290


Просмотр профиля
« Ответ #12 : Январь 13, 2012, 13:36 »

stima,
Цитировать
Day я лично сомневаюсь, что у тебя .exe был в папке с исходниками, если ты конечно не переписывал .pro файл.
И это не "недочет Qt" это просто не понимание, что происходит.
Ничего я не переписывал. В pro:
Win32:TARGET=..\ScrollArea
.exe точно в этой же папке. И по времени смотрел - тот самый.
Но тут дело значительно хужее.
Переписал я в папку с исходниками и exe библиотечки mingwm10, qtcore4, qtgui4.dll, чтоб значит, независимым быть.
Запускаю - нет картинки! И с jpg в корне, и в текущей.
Выкинул библиотеки. Запуск из Qt с картинкой в корне - все Ок!
Ладно, чуть попозже попробую с applicationDirPath, но вообще-то мне это начинает не нравится.
Правда, библиотеки я брал с предыдущей установки Qt, но с того же дистрибутива и по дате-размеру они совпадают
Записан
Bepec
Гость
« Ответ #13 : Январь 13, 2012, 13:46 »

Вы прежде чем независимым быть, спросили бы у людей, а что нужно с собой брать.

Идите в папку Qt "C:\Qt\4.7.2\plugins\imageformats\".

Идетё в папку со своей программой, и копируете туда  "imageformats\qjpeg4.dll" - каталог там должен быть именно с таким названием. А в нём dll.

Это позволяет использовать формат jpeg для картинок.

PS а я начал уважать png. Для него вроде кодеки ненужны Веселый
Записан
Day
Частый гость
***
Offline Offline

Сообщений: 290


Просмотр профиля
« Ответ #14 : Январь 13, 2012, 13:48 »

Переписал библиотеки из последней поставки - все Ok!
Будем считать это глюком.
Но при картинке в текущей директории запуск из Qt ее не видит.
А если тупо запустить экзэшник - все хорошо.
Записан
Страниц: [1] 2 3   Вверх
  Печать  
 
Перейти в:  


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