crossplatform.ru

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


  Ответ в Property Browser (PropertySheet)
Введите ваше имя
Подтвердите код

Введите в поле код из 6 символов, отображенных в виде изображения. Если вы не можете прочитать код с изображения, нажмите на изображение для генерации нового кода.
Теги
Выровнять по центру
Ссылка на тему
Ссылка на сообщение
Скрытый текст
Сокращение
Код с подсветкой
Offtopic
 
Удалить форматирование
Спец. элементы
Шрифт
Размер
 
Цвет шрифта
 
Отменить ввод
Вернуть ввод
Полужирный
Курсив
Подчеркнутый
 
 
Смайлики
Вставить изображение
Вставить адрес электронной почты
Цитата
Код
Раскрывающийся текст
 
Увеличить отступ
По левому краю
По центру
По правому краю
Вставить список
Вставить список

Опции сообщения
 Включить смайлы?
Иконки сообщения
(Опционально)
                                
                                
  [ Без иконки ]
 


Последние 10 сообщений [ в обратном порядке ]
QCasper Дата 26.11.2007, 16:25
  Вообще говоря, я думал из примера все понятно.

Допустим нам надо чтобы у нас было два свойства, одно текстовое (например host), второе численное (например port). Подходящими виджетами являются виджеты QTextEdit и QSpinBox соответственно, поэтому мы создаем объекты этих виджетов:
m_Host = new QTextEdit(ps);
m_Port = new QSpinBox(ps);


Передавая в качестве родителя ps, я немного забежал вперед, то есть фактически код должен выглядеть так:

QPropertySheet *ps = new QPropertySheet(this);

m_Host = new QTextEdit(ps);
m_Port = new QSpinBox(ps);


После того, как виджеты созданы, мы их вставляем в таблицу, предварительно создав заголовок (темно-серая строчка с плюсиком/минусиком для скрытия/показа данной группы виджетов):

ps->addCaption("Netowrk settings");
ps->addPropertyWidget("host", m_Host);
ps->addPropertyWidget("port", m_Port);


И все, останется только разместить сам виджет таблицы в окне Вашего диалога или док-виджета или еще где-то. То есть, например, окончательный код диалога с таблицей из двух свойств примет такой вид:
class SettingsDialog : public QDialog {
   Q_OBJECT
public:
   SettingsDialog(QWidget *parent  = 0);

private:
   QLineEdit *m_Host;
   QSpinBox *m_Port;
};

SettingsDialog::SettingsDialog(QWidget *parent):QDialog(parent) {
   PropertySheet *ps = new PropertySheet(this);

   m_Host = new QLineEdit(ps);
   m_Port = new QSpinBox(ps);

   ps->addCaption("Network settings");
   ps->addPropertyWidget("host", m_Host);
   ps->addPropertyWidget("port", m_Port);

   QVBoxLayout *lt = new QVBoxLayout(this);
   lt->addWidget(ps);
}


И все, а далее, для работы со свойствами, нужно обращаться напрямую к m_Host и к m_Port.
ViGOur Дата 26.11.2007, 16:04
  По всей видимости он имеет ввиду, что у его Property Browser связывается с виджетом так:
// ** Собственно связывание QPropertyGrid с объектом
QPropertyGrid:::sPropertyDef *def = someClassObject->CreatePropertyDef();
propertyGrid->SetObject( def );

delete[]def;
QCasper Дата 26.11.2007, 15:45
 
Цитата(0xF @ 26.11.2007, 15:18) *
Забойно смотрится :) Только вот как связывать его с конкретным объектом? О_о


Что именно и с чем требуется связать? Или, другими словами, какая перед Вами задача, и что Вы хотите видеть в результате?
0xF Дата 26.11.2007, 15:18
  Забойно смотрится :) Только вот как связывать его с конкретным объектом? О_о
Admin Дата 26.11.2007, 14:03
  Выложил: http://crossplatform.ru/?q=node/383
ViGOur Дата 26.11.2007, 14:01
  Может разделить на две темы, так как вроде тема одна, а Property Browser'ы разные?
QCasper Дата 26.11.2007, 13:51
 
Цитата(Admin @ 26.11.2007, 13:37) *
Выложи архив его если не жалко, так же поместим на сайте... :)

Вот Прикрепленный файл  ps.zip ( 2.37 килобайт ) Кол-во скачиваний: 1053
Admin Дата 26.11.2007, 13:37
  Выложи архив его если не жалко, так же поместим на сайте... :)
QCasper Дата 26.11.2007, 12:37
  Предлагаю посмотреть на мой вариант таблицы свойств.
Скриншот:
 Р В Р’ Р’ Р’ Р’ Р’ Р’ Р’ Р в‚¬Р В РЎВ˜Р В Р’µР Р…ьшено Р Т‘Р С• 30%
Прикрепленное изображение
379 x 513 (15.79 килобайт)


Использование:

PropertySheet *ps = new PropertySheet(this);

ps->addCaption("Account settings");   // темно-серый заголовок
ps->addPropertyWidget("username", new QTextEdit(this)); // свойство
ps->addPropertyWidget("password", new QTextEdit(this));  // свойство


ps->addCaption("Network settings");   // второй темно-серый заголовок
ps->addPropertyWidget("URL", new QTextEdit(this)); // свойство
ps->addPropertyWidget("Port", new QSpinBox(this));  // свойство


Плюсы: удобство использования, в качестве редактора свойства можно использовать любой виджет
Минусы: требовательность к ресурсам, по тому как после завершения использования виджета-свойства он не удаляется, как в случае с делегатами

Фактически это некий layout, напоминающий таблицу свойств, с возможностью сворачивать группы виджетов в одну строчку
Просмотр темы полностью (откроется в новом окне)
RSS Рейтинг@Mail.ru Текстовая версия Сейчас: 4.7.2025, 23:40