crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

heiheshang
  опции профиля:
сообщение 9.4.2009, 9:43
Сообщение #1


Студент
*

Группа: Новичок
Сообщений: 10
Регистрация: 9.4.2009
Пользователь №: 666

Спасибо сказали: 0 раз(а)




Репутация:   0  


У объекта есть проперти.
Q_PROPERTY( QStringList DefHeaders READ getDefHeaders WRITE setDefHeaders DESIGNABLE true USER true SCRIPTABLE true)
В конструкторе объекта пытаюсь прочитать значения через getDefHeaders, показывает что нет значений, хотя в ui файле все заполнено и в дизайнере все показывается. В чем проблема ?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
2 страниц V   1 2 >  
Начать новую тему
Ответов (1 - 18)
Litkevich Yuriy
  опции профиля:
сообщение 9.4.2009, 9:51
Сообщение #2


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


Цитата(heiheshang @ 9.4.2009, 13:43) *
В чем проблема ?
приведи код конструктора, может ты до создания формы их читаешь
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
heiheshang
  опции профиля:
сообщение 9.4.2009, 12:47
Сообщение #3


Студент
*

Группа: Новичок
Сообщений: 10
Регистрация: 9.4.2009
Пользователь №: 666

Спасибо сказали: 0 раз(а)




Репутация:   0  


Не понял что значит до создания формы ? Во время создания формы создается объект, как объект нарисуется если у него свойства не определены ?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
igor_bogomolov
  опции профиля:
сообщение 9.4.2009, 13:19
Сообщение #4


Профессионал
*****

Группа: Сомодератор
Сообщений: 1215
Регистрация: 22.3.2009
Из: Саратов
Пользователь №: 630

Спасибо сказали: 235 раз(а)




Репутация:   29  


Цитата(heiheshang @ 9.4.2009, 10:43) *
В конструкторе объекта пытаюсь прочитать значения через getDefHeaders, показывает что нет значений, хотя в ui файле все заполнено
Цитата(heiheshang @ 9.4.2009, 13:47) *
Не понял что значит до создания формы ?

Если пытаетесь читать значения getDefHeaders, до вызова setupUi(), то естественно ничего и не прочитаете.
В лубом случае ищите ошибки у себя в коде, задача элементарная. Либо, выкладывайте исходники конструктора, гетера и сетера.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
heiheshang
  опции профиля:
сообщение 9.4.2009, 13:30
Сообщение #5


Студент
*

Группа: Новичок
Сообщений: 10
Регистрация: 9.4.2009
Пользователь №: 666

Спасибо сказали: 0 раз(а)




Репутация:   0  


Ну примерно так создаю форму
QFormBuilder fb;
QWidget *form = fb.load(d);
form->show();
читаю форму из файла. В какой момент происходит заполнение свойств ?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 9.4.2009, 13:46
Сообщение #6


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


попробуй перед show(), вызвать:
form->setupUi();
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
igor_bogomolov
  опции профиля:
сообщение 9.4.2009, 15:23
Сообщение #7


Профессионал
*****

Группа: Сомодератор
Сообщений: 1215
Регистрация: 22.3.2009
Из: Саратов
Пользователь №: 630

Спасибо сказали: 235 раз(а)




Репутация:   29  


Цитата(Litkevich Yuriy @ 9.4.2009, 14:46) *
попробуй перед show(), вызвать:
form->setupUi();
Там динамическая закрузка из формы. Повторно делать setupUi не надо. Я предпологаю, что heiheshang просто неправильно свойство запрашивает.

2 heiheshang
Раз отказываетесь показать свой код, не знаю какие у вас там секреты, предлогаю вам простейший рабочий пример. Разбирайтесь по нему.

Раскрывающийся текст
int main(int argc, char *argv[])
{
     QApplication a(argc, argv);
    
     QFormBuilder builder;
     QFile file("../untitled.ui");
     file.open(QFile::ReadOnly);
     QWidget *myWidget = builder.load(&file);
     file.close();
    
     myWidget->show();
    
     QPushButton *button = myWidget->findChild<QPushButton *>("pushButton");
     qDebug() << button->property("flat").toBool();
    
     return a.exec();
}
Что непонятно, спрашивайте.

P.S. В данном примере, у меня на форме расположена единственная кнопка, с установленным свойством flat. Это свойство я и запрашиваю. Все работает, никаких проблем не возникает.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
heiheshang
  опции профиля:
сообщение 9.4.2009, 15:37
Сообщение #8


Студент
*

Группа: Новичок
Сообщений: 10
Регистрация: 9.4.2009
Пользователь №: 666

Спасибо сказали: 0 раз(а)




Репутация:   0  


Откуда возмется этот метод ?
Его генерит метакомпилятор , а я динамически создаю форму у меня ui_...h файла нет
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
kwisp
  опции профиля:
сообщение 9.4.2009, 15:41
Сообщение #9


астарожна ынтжинэр
*****

Группа: Участник
Сообщений: 1404
Регистрация: 26.11.2008
Из: ТаганрогРодинаЧехова
Пользователь №: 435

Спасибо сказали: 113 раз(а)




Репутация:   23  


igor_bogomolov,
может вы немного не поняли вопроса.
это скорее всего динамическое свойство
Цитата
button->property("flat").toBool()


а heiheshang, пользует другой род свойство с помощью макросов
с помощью этого на сколько я понимаю можно менять свойства класса выше по иерархии
вот пример из ассистента
QPushButton *button = new QPushButton;
 QObject *object = button;

 button->setDown(true);
 object->setProperty("down", true);


Сообщение отредактировал kwisp - 9.4.2009, 15:45
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
heiheshang
  опции профиля:
сообщение 9.4.2009, 15:44
Сообщение #10


Студент
*

Группа: Новичок
Сообщений: 10
Регистрация: 9.4.2009
Пользователь №: 666

Спасибо сказали: 0 раз(а)




Репутация:   0  


Не отказываюсь я показывать.
В конструкторе объекта вызываю
QStringList hl = getDefHeaders();
for(int i=0; i<hl.count(); i++)
{
    printf(hl[i]);printf("\n");
}

Вот весь код. В вашем примере вы показываете форму , а потом обращаетесь к свойству, а мне надо прочитать свойства и отрисовать в самом объекте. Форма еще не показалась, я только ее генерю.
Причина редактирования: используйте тэг code
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
kwisp
  опции профиля:
сообщение 9.4.2009, 15:48
Сообщение #11


астарожна ынтжинэр
*****

Группа: Участник
Сообщений: 1404
Регистрация: 26.11.2008
Из: ТаганрогРодинаЧехова
Пользователь №: 435

Спасибо сказали: 113 раз(а)




Репутация:   23  


Цитата(heiheshang @ 9.4.2009, 14:30) *
читаю форму из файла. В какой момент происходит заполнение свойств ?

надо проверять:)

скорее всего в момент установки формы. т.е. загрузки.
а методы
getDefHeaders
setDefHeaders

где определены?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
igor_bogomolov
  опции профиля:
сообщение 9.4.2009, 16:30
Сообщение #12


Профессионал
*****

Группа: Сомодератор
Сообщений: 1215
Регистрация: 22.3.2009
Из: Саратов
Пользователь №: 630

Спасибо сказали: 235 раз(а)




Репутация:   29  


Цитата(kwisp @ 9.4.2009, 16:41) *
может вы немного не поняли вопроса.

Наверно действительно что то не так понимаю. Тем интереснее читать эту тему и попробовать разобраться. Всю информацию я почерпнул из асистента по классу QFormBuilder. В примере там идет явная загрузка из ui файла. Если посмотрите мой пример, у меня там никокого ui_ххх.h тоже нет. Загрузка идет из файла .ui
Форму можно и не показывать, т.е. myWidget->show() убрать. Загружаю форму в виджет, добирабсь до кнопки, и запрашиваю ее свойство.
Прошу поподробнее объяснить что я не понимаю, а то я на самом деле уже запутался. :rolleyes:

------------------------------------------------
добавлено
-----------------------------------------------
Еще раз перечитал тему и запутался просто окончательно.
Цитата(heiheshang @ 9.4.2009, 10:43) *
У объекта есть проперти.
Q_PROPERTY( QStringList DefHeaders READ getDefHeaders WRITE setDefHeaders DESIGNABLE true USER true SCRIPTABLE true)
Цитата(heiheshang @ 9.4.2009, 10:43) *
в ui файле все заполнено и в дизайнере все показывается

Замечательно. У QPushButton тоже есть проперти
Q_PROPERTY(bool flat READ isFlat WRITE setFlat)
В дизаенере я установил это свойство в true, что также отображается в ui файле
<property name="flat">
<bool>true</bool>
</property>
Цитата(heiheshang @ 9.4.2009, 14:30) *
читаю форму из файла
А я что делаю? Так же читаю форму из файла.
Цитата(heiheshang @ 9.4.2009, 16:37) *
а я динамически создаю форму у меня ui_...h файла нет
А я как создаю? Разве не динамически? ui_xxx.h у меня так же нет.
Тем не менее я добираюсь до необходимого мне свойства, и вывожу его в консоль через QDebug.

Теперерь буду весь день нервничать, пока мне не объяснят что я неправильно понимаю. :unsure:

Сообщение отредактировал igor_bogomolov - 9.4.2009, 16:56
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
heiheshang
  опции профиля:
сообщение 10.4.2009, 3:10
Сообщение #13


Студент
*

Группа: Новичок
Сообщений: 10
Регистрация: 9.4.2009
Пользователь №: 666

Спасибо сказали: 0 раз(а)




Репутация:   0  


Вы добираетесь до свойства объекта, отлично, я пытаюсь обратится к свойству в конструкторе объекта который создается в процесе чтения из ui файла. В какой момент происходит присвоение свойств,может в конструкторе объекта еще свойства не существуют, надо их считывать после создания объекта ?
class wMay : public QWidget
{
Q_OBJECT
    Q_PROPERTY( QStringList    DefHeaders READ getDefHeaders WRITE setDefHeaders DESIGNABLE true USER true SCRIPTABLE true)
}
wMay::wMay():QWidget()
{
QStringList hl = getDefHeaders();

for(int i=0; i<hl.count(); i++)
    {
        printf(hl[i]);printf("\n");
    }
}

в файле ui такой кусок.
 <property name="DefHeaders">
            <stringlist>
                <string>Имя константы</string>
                <string>Строка</string>
                <string>Число</string>
                <string>Дата</string>
                <string>Фирма</string>
                <string>Валюта</string>
                <string>Склад</string>
                <string>НДС</string>
                <string>Единица</string>
                <string>Значение</string>
            </stringlist>
        </property>
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 10.4.2009, 8:07
Сообщение #14


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


heiheshang, пользуйся тэгом code, справка

heiheshang, я ровным счётом ничего не понял.
Есть класс wMay, который является только лишь наследником QWidget, у него свойство DefHeaders, причём здесь свойства в ui-файла, который неотносится к этому класу никоим образом?

Приведи код функций getDefHeaders, setDefHeaders и объявление класса.

я так понимаю, ты хочешь сделать виджет-плагин для дизайнера. И возникает проблема при использовании этого виджета в последствии.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
kwisp
  опции профиля:
сообщение 10.4.2009, 8:13
Сообщение #15


астарожна ынтжинэр
*****

Группа: Участник
Сообщений: 1404
Регистрация: 26.11.2008
Из: ТаганрогРодинаЧехова
Пользователь №: 435

Спасибо сказали: 113 раз(а)




Репутация:   23  


Цитата(Litkevich Yuriy @ 10.4.2009, 9:07) *
Приведи код функций getDefHeaders, setDefHeaders и объявление класса.

Цитата(kwisp @ 9.4.2009, 16:48) *
а методы
getDefHeaders
setDefHeaders
где определены?

ну покажи где они, ну пожалуйста, будь человеком....
люди просють...
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 10.4.2009, 9:00
Сообщение #16


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


Если я правильно понял, то человек делает так:
создал класс wMay, сделал на его основе плагин для Дизайнера.
В дизайнере использует этот класс.
Затем получившийся ui-файл загружает в своей программе с помощью QFormBuilder

Макрос Q_PROPERTY объясняет дизайнеру какими функциями пользоваться, когда он должен прочитать свойства или сохранить.

Поэтому я вот по размышлял и пришёл к выводу, что толку от этих функций (от того, что мы их увидим) нам ни какого.

А код в 13 сообщении, это как раз код плагина. Где и правда неясно как прочитать свойства самого себя.

heiheshang, в приведённом примере ui-файла это ты ввел такие значения свойства (Имя константы, ...)?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
heiheshang
  опции профиля:
сообщение 10.4.2009, 9:15
Сообщение #17


Студент
*

Группа: Новичок
Сообщений: 10
Регистрация: 9.4.2009
Пользователь №: 666

Спасибо сказали: 0 раз(а)




Репутация:   0  


В смысле не относится, этот класс создается плагином при чтении ui файла. Привожу код функций
QStringList
wMay::getDefHeaders() const
{
    return hname;
}
void
wMay::setDefHeaders(QStringList lst)
{
    hname = lst;
}


Цитата
heiheshang, в приведённом примере ui-файла это ты ввел такие значения свойства (Имя константы, ...)?

Я их ввел в дизайнере.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 10.4.2009, 9:19
Сообщение #18


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


Цитата(heiheshang @ 10.4.2009, 13:15) *
этот класс создается плагином при чтении ui файла.
неаверное не этот а его наследник? или я опять не понял?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
igor_bogomolov
  опции профиля:
сообщение 10.4.2009, 12:50
Сообщение #19


Профессионал
*****

Группа: Сомодератор
Сообщений: 1215
Регистрация: 22.3.2009
Из: Саратов
Пользователь №: 630

Спасибо сказали: 235 раз(а)




Репутация:   29  


Да тут сам черт ногу сломит. Логика программы совершенно неправильная.
Читаем Юрия, и учимся
Цитата(Litkevich Yuriy @ 10.4.2009, 10:00) *
создал класс wMay, сделал на его основе плагин для Дизайнера.
В дизайнере использует этот класс.
Затем получившийся ui-файл загружает в своей программе с помощью QFormBuilder

Макрос Q_PROPERTY объясняет дизайнеру какими функциями пользоваться, когда он должен прочитать свойства или сохранить.

Далее, создается форма в десигнере. В Property Editor, вы задаете свойвтво своего виджета посредством setDefHeaders. Дале если вы хотите чтобы ваш виджет как то отреагировал на изменение этого свойства (например перерисовался по другому), то это должно быть описано именно в методе setDefHeaders. Перечитавать свойства в самом конструкторе класса wMay просто бессмысленно. hname в этот момент ничего не содержит.
Т.о. если вы опишите как должен отреагировать виджет на изменение свойства setDefHeaders, то ничего более делать не придется. При загрузке ui формы все автоматически отобразится должным образом.
:rolleyes:
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

2 страниц V   1 2 >
Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0


RSS Рейтинг@Mail.ru Текстовая версия Сейчас: 11.6.2025, 9:26