crossplatform.ru

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

 
Ответить в данную темуНачать новую тему
> Property Browser (PropertySheet), Предлагаю посмотреть на мой вариант таблицы свойств
QCasper
  опции профиля:
сообщение 26.11.2007, 12:37
Сообщение #1


Студент
*

Группа: Участник
Сообщений: 66
Регистрация: 26.11.2007
Пользователь №: 24

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




Репутация:   1  


Предлагаю посмотреть на мой вариант таблицы свойств.
Скриншот:
Прикрепленное изображение


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

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, напоминающий таблицу свойств, с возможностью сворачивать группы виджетов в одну строчку

Сообщение отредактировал QCasper - 26.11.2007, 12:39
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Admin
  опции профиля:
сообщение 26.11.2007, 13:37
Сообщение #2


Администратор
****

Группа: Администратор
Сообщений: 644
Регистрация: 9.10.2007
Из: crossplatform.ru
Пользователь №: 1

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




Репутация:   2  


Выложи архив его если не жалко, так же поместим на сайте... :)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
QCasper
  опции профиля:
сообщение 26.11.2007, 13:51
Сообщение #3


Студент
*

Группа: Участник
Сообщений: 66
Регистрация: 26.11.2007
Пользователь №: 24

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




Репутация:   1  


Цитата(Admin @ 26.11.2007, 13:37) *
Выложи архив его если не жалко, так же поместим на сайте... :)

Вот Прикрепленный файл  ps.zip ( 2.37 килобайт ) Кол-во скачиваний: 831
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
ViGOur
  опции профиля:
сообщение 26.11.2007, 14:01
Сообщение #4


Мастер
******

Группа: Модератор
Сообщений: 3291
Регистрация: 9.10.2007
Из: Москва
Пользователь №: 4

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




Репутация:   40  


Может разделить на две темы, так как вроде тема одна, а Property Browser'ы разные?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Admin
  опции профиля:
сообщение 26.11.2007, 14:03
Сообщение #5


Администратор
****

Группа: Администратор
Сообщений: 644
Регистрация: 9.10.2007
Из: crossplatform.ru
Пользователь №: 1

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




Репутация:   2  


Выложил: http://crossplatform.ru/?q=node/383
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
0xF
  опции профиля:
сообщение 26.11.2007, 15:18
Сообщение #6


Студент
*

Группа: Участник
Сообщений: 71
Регистрация: 12.11.2007
Пользователь №: 20

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




Репутация:   0  


Забойно смотрится :) Только вот как связывать его с конкретным объектом? О_о
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
QCasper
  опции профиля:
сообщение 26.11.2007, 15:45
Сообщение #7


Студент
*

Группа: Участник
Сообщений: 66
Регистрация: 26.11.2007
Пользователь №: 24

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




Репутация:   1  


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


Что именно и с чем требуется связать? Или, другими словами, какая перед Вами задача, и что Вы хотите видеть в результате?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
ViGOur
  опции профиля:
сообщение 26.11.2007, 16:04
Сообщение #8


Мастер
******

Группа: Модератор
Сообщений: 3291
Регистрация: 9.10.2007
Из: Москва
Пользователь №: 4

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




Репутация:   40  


По всей видимости он имеет ввиду, что у его Property Browser связывается с виджетом так:
// ** Собственно связывание QPropertyGrid с объектом
QPropertyGrid:::sPropertyDef *def = someClassObject->CreatePropertyDef();
propertyGrid->SetObject( def );

delete[]def;
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
QCasper
  опции профиля:
сообщение 26.11.2007, 16:25
Сообщение #9


Студент
*

Группа: Участник
Сообщений: 66
Регистрация: 26.11.2007
Пользователь №: 24

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




Репутация:   1  


Вообще говоря, я думал из примера все понятно.

Допустим нам надо чтобы у нас было два свойства, одно текстовое (например 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.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

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


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




RSS Текстовая версия Сейчас: 13.8.2020, 19:24