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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Qt-4.1.4 - QWidget и setSizePolicy () - ИМХО ГЛЮК!!!  (Прочитано 12021 раз)
pacmanoid
Гость
« : Сентябрь 01, 2006, 20:06 »

Использую QT-4.1.4 под LINUX, точнее из пакета qt-x11-opensource-src-4.1.4.tar.gz .
Я непойму, это глюк или так и должно быть. Пробовал с разными виджетами. Вот пример с QSpinBox.

Например имеется простой код:

Код:
...
QSpinBox *integerSpinBox = new QSpinBox;
integerSpinBox->setSizePolicy ( QSizePolicy::Expanding );
...


но при компиляции получается:

Код:
g++ -c -pipe -g -Wall -W -D_REENTRANT  -DQT_GUI_LIB -DQT_CORE_LIB -DQT_SHARED -I/usr/local/Trolltech/Qt-4.1.4/mkspecs/linux-g++ -I. -I/usr/local/Trolltech/Qt-4.1.4/include/QtCore -I/usr/local/Trolltech/Qt-4.1.4/include/QtGui -I/usr/local/Trolltech/Qt-4.1.4/include -I. -I. -o window.o window.cpp
/usr/local/Trolltech/Qt-4.1.4/include/QtGui/qsizepolicy.h: In member function `
   void Window::createSpinBoxes()':
/usr/local/Trolltech/Qt-4.1.4/include/QtGui/qsizepolicy.h:144: error: `
   QSizePolicy::QSizePolicy(int)' is private
window.cpp:50: error: within this context
make: *** [window.o]  1
make:  `first'    - .


По документации функция setSizePolicy() принадлежит классу QWidget и имеет спецификатор public: Тоесть получается что она должна вызываться без проблем где угодно у объектов порожденных от QWidget. Но вот выходит такая вот ошибка.
Записан
Steven_Orko
Гость
« Ответ #1 : Сентябрь 01, 2006, 21:26 »

Насколько я понимаю текст ошибки, то он не имеет никакого отношения к setSizePolicy, вернее к ее видимости. А ошибка говорит о том, что контруктор QSizePolicy приватный, т.е. класс имеет скорее всего защиту от копирования.
Записан
noosooth
Гость
« Ответ #2 : Сентябрь 02, 2006, 00:10 »

Конечно же  QWidget::setSizePolicy(...) здесь не виновата.
Просто у класса QWidget нет функции setSizePolicy(QSizePolicy::Policy)

Есть вот такие:
Код:

void setSizePolicy(QSizePolicy::Policy horizontal, QSizePolicy::Policy vertical)
void setSizePolicy(QSizePolicy policy)


to pacmanoid:
Вы наверное просто забыли ещё один параметр передать?
Либо хотели передать в качестве параметра класс QSizePolicy, а
передали enum QSizePolicy::Policy.

А у компилятора то  "оverload resolution" и он выбрал в данном случае ф-цию: void setSizePolicy(QSizePolicy policy).
Т.е. ожидал на входе класс QSizePolicy.

А у класса QSizePolicy к несчастью есть private конструктор:
QSizePolicy(int i).

Ваш enum привёлся к int'у и компилятор попытался неявно вызвать конструктор QSizePolicy(int i).

Вот такой у нас "чудный" язык Улыбающийся.
Записан
pacmanoid
Гость
« Ответ #3 : Сентябрь 02, 2006, 14:36 »

Вот в том то вся и соль, что вызаов:

Код:
integerSpinBox->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);


компилируется без ошибок, а вызов:

Код:
integerSpinBox->setSizePolicy(QSizePolicy::Expanding);


уже не компилмруется, компилятор выдает вышеуказанную ошибку.
А по документации эти две вункции имеют специвикатор public: и в описании находятся по соседству.
Записан
noosooth
Гость
« Ответ #4 : Сентябрь 02, 2006, 15:52 »

Мда...

Повторяю:
Вы передаете в функцию не тот параметр, который ей нужен.
Ей нужен класс QSizePolicy, а Вы передаете ей enum QSizePolicy::Policy. Разницу улавливаете?
Записан
pacmanoid
Гость
« Ответ #5 : Сентябрь 02, 2006, 17:45 »

Цитата: "noosooth"
Мда...

Повторяю:
Вы передаете в функцию не тот параметр, который ей нужен.
Ей нужен класс QSizePolicy, а Вы передаете ей enum QSizePolicy::Policy. Разницу улавливаете?


Виноват. Все, дошло до колхозника, звыняюсь. Вот до чего доводит автоматизм восприятия текстовой информации. Эдакая психопатогенная слепота.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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