Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Магия Сей, QVariant + QLabel = Something magical 
:(
    Опции темы
HomerJSimpsoN
Дата 6.2.2012, 20:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 11
Регистрация: 5.2.2012

Репутация: нет
Всего: нет



Граждане программисты!) Прошу вашей помощи)
Ошибка крайне смешная, из этой эе песенки)

Если кто понимает причину, пожалуйста, поясните) Буду признателен =)

Есть кусман кода)

Код

    ...
    dbaseQuery.exec("SQL Query");
 
    while( dbaseQuery->next() )
    {
        i++;
        QLabel *label = new QLabel();
        label->setFont(font);

        QString s = "some string";
        label->setText(s);

        QMessageBox mb;
        mb.setText(s + " " + label->text());
        if( i <= 5)
            mb.exec();

        ui->scrollLayout->addWidget(label);
    }
    ui->scrollLayout->setGeometry(QRect(QPoint(0,0), ui->scrollLayout->sizeHint()));



Все суперско работает =)
Мы видим ряд QLabel'ов с вертикальной полосой прокрутки.

Далее, имеем следующий кусман кода =)

Код

    QSqlQuery dbaseQuery; 
    ...
    dbaseQuery.exec("SQL Query");
 
    while( dbaseQuery->next() )
    {
        i++;
        QLabel *label = new QLabel();
        label->setFont(font);

        QString s = dbaseQuery->value(0).toString();
        label->setText(s);

        QMessageBox mb;
        mb.setText(s + " " + label->text());
        if( i <= 5)
            mb.exec();

        ui->scrollLayout->addWidget(label);
    }
    ui->scrollLayout->setGeometry(QRect(QPoint(0,0), ui->scrollLayout->sizeHint()));


Как видите, отличие лишь в другом определении строки.
Мессажбокс показывает, что в s действительно кидается некая информация, все ок)
При чем, s == label->text()
НО!!!
Мы получаем пустое поле с 2мя скрол-барами!!!
И ничего не работает)

Я не понимаю, как такое вообще возможно)
Спасибо за помощь заранее)
PM MAIL   Вверх
_GRIN_
Дата 6.2.2012, 22:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


одинокий падаван
**


Профиль
Группа: Участник
Сообщений: 272
Регистрация: 18.11.2007
Где: Калуга

Репутация: 6
Всего: 7



очевидно
Код

dbaseQuery->value(0).toString();

Возвращает пустую строку.


--------------------
Дорогу осилит идущий
PM MAIL Skype   Вверх
HomerJSimpsoN
Дата 6.2.2012, 22:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 11
Регистрация: 5.2.2012

Репутация: нет
Всего: нет



Почему))) Не все так просто ;)
MessageBox показывает обратное)
PM MAIL   Вверх
HomerJSimpsoN
Дата 6.2.2012, 22:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 11
Регистрация: 5.2.2012

Репутация: нет
Всего: нет



=D
Итак, с более тупой проблемой я еще не сталкивался))))

Ради тестирования, я загнал в БД достаточно длинные строки и начал их выводить соответственно в это вот окошечко)
Очень длинная строка - хз почему, вырождалась в линию и при поступлении следующего лэйбла - просто вырождалась.
И мы получали пустое поле с 2мя скрол барами)))

Решение:
Код


    int i = 1;
    QFont font;
    font.setPointSize(10);
    QSizePolicy sizePolicy;
    sizePolicy.setVerticalPolicy(QSizePolicy::Fixed);
    sizePolicy.setHorizontalPolicy(QSizePolicy::Fixed);

    while( dbaseQuery->next() )
    {
        i++;
        QLabel *label = new QLabel();
        label->setFont(font);
        QByteArray val = dbaseQuery->value(0).toByteArray();
        label->setText(val);
        label->setMaximumWidth(ui->scrollAreaWidgetContents->size().width() - 10);
        label->setSizePolicy(sizePolicy);
        label->setWordWrap(true);

        ui->scrollLayout->addWidget(label);
    }
    ui->scrollLayout->setGeometry(QRect(QPoint(0,0), ui->scrollLayout->sizeHint()));

Спасибо тем, кто хоть попытался прочесть вышепрописанное)

Это сообщение отредактировал(а) HomerJSimpsoN - 6.2.2012, 22:53
PM MAIL   Вверх
borisbn
Дата 7.2.2012, 08:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

Репутация: 48
Всего: 135



Цитата(HomerJSimpsoN @  6.2.2012,  22:51 Найти цитируемый пост)
 label->setFont(font);

попробуй не задавать шрифт. ты его ничем не инициализируешь...


--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
HomerJSimpsoN
Дата 7.2.2012, 20:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 11
Регистрация: 5.2.2012

Репутация: нет
Всего: нет



Хм....
Как оказалось - совет крайне дельный! Спасибо.
Но почему так происходит? Разве когда я объявляю QFont font; этот самый font не должен инициализироваться стандартными параметрами?..
И вот такой вот баг все еще остается, может сталкивались =)

Создается вышеуказанным способом окошко (см картинку).
Если у меня нету экстра длинных лэйблов (дата, для этих лэйблов берется из БД), тогда все супер.
Но если такое есть, они растягиваются во всю ширь экрана (не зависимо от размеров формы) не смотря на то, что у меня убран горизонтальный скролл бар и стоит следующая политика изменения размера:
Код

    QSizePolicy labelPolicy;  // Только для меток
    labelPolicy.setVerticalPolicy(QSizePolicy::Fixed);
    labelPolicy.setHorizontalPolicy(QSizePolicy::Maximum);

    QSizePolicy sizePolicy;  // Для остальных объектов
    sizePolicy.setVerticalPolicy(QSizePolicy::Fixed);
    sizePolicy.setHorizontalPolicy(QSizePolicy::Expanding);

Если ставлю в горизонтальной политике Maximum - то они кучкуются.

Часть кода этой процедуры:
Код

    ui->scrollArea->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);

    while( dbaseQuery->next() )
    {
        if( i )
            ui->scrollLayout->addSpacing(20);

        i++;
        // Загрузим в наш слой все эти элементы
        // предварительно добавив туда метку с номером и описание поля

        QLabel *label = new QLabel();

        label->setText(QString::number(i) + ". " + dbaseQuery->value(0).toString());

        label->setSizePolicy(labelPolicy);
        label->setWordWrap(true);
        ui->scrollLayout->addWidget(label);
        ...
        // Далее строятся другие объекты, у которых стоит обычный sizePolisy 

user posted image

Это сообщение отредактировал(а) HomerJSimpsoN - 7.2.2012, 20:27
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С/С++: Кроссплатформенное программирование, QT/Gtk+/wxWidgets"
JackYF
Любитель
  • В заголовке темы в квадратных скобках обозначьте используемую вами библиотеку, например: [QT],[GTK],[wx].
  • Если вопрос актуален только для некоторой версии библиотеки, либо, если вы пользуетесь не самой последней версией, укажите это. Например: [QT4], [GTK2].
  • Все начинающие изучать Qt - не забудьте зайти сюда.
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • В вопросе укажите полную версию версию библиотеки, а также все дополнительные используемые программные пакеты.
  • Не забывайте пользоваться кнопкой "Код".
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к тематике этого раздела. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, Любитель.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets | Следующая тема »


 




[ Время генерации скрипта: 0.0451 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.