crossplatform.ru

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

 
Ответить в данную темуНачать новую тему
> QHBoxLayout и дочерние виджеты, Растянуть дочение виджеты на весь Layout
kunashir
  опции профиля:
сообщение 11.3.2011, 11:08
Сообщение #1


Новичок


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

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




Репутация:   0  


Создал класс наследника от Layout: он содержит кнопку (PushButton) и поле ввода (LineEdit), а также QHBoxLayout, на котором предыдущие виджеты и располагаются.
Так проблема в том что это дочерние виджеты не занимаю все область Layout'а. А так как класс собираюсь использовать в качестве делегата - в ячейки QTableView это выглядит не очень... Вот собственно вопрос - как заставить внутренние виджеты занимать все доступную область.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
silver47
  опции профиля:
сообщение 11.3.2011, 12:02
Сообщение #2


Активный участник
***

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

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




Репутация:   6  


Цитата(kunashir @ 11.3.2011, 13:08) *
Создал класс наследника от Layout: он содержит кнопку (PushButton) и поле ввода (LineEdit), а также QHBoxLayout, на котором предыдущие виджеты и располагаются.
Так проблема в том что это дочерние виджеты не занимаю все область Layout'а. А так как класс собираюсь использовать в качестве делегата - в ячейки QTableView это выглядит не очень... Вот собственно вопрос - как заставить внутренние виджеты занимать все доступную область.


гм. А зачем класс наследовать от Layout? В конце-концов он будет виджетом, может лучше отнаследовать от виджета?
Собсна:
QHBoxLayout *mainLay = new QHBoxLayout(this);
mainLay->addWidget(btn = new QPushButton("SomeText"));
mainLay->addWidget(edit = new QLineEdit);
this->setLayout(mainLay);

Все нормально работает и растягивается на весь размер виджета.

P.S.: Попробуй через запятую указать коэфициент изменения размеров, по-умолчанию он 0, поставь по 1ке.

Сообщение отредактировал silver47 - 11.3.2011, 12:06
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
kunashir
  опции профиля:
сообщение 11.3.2011, 12:51
Сообщение #3


Новичок


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

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




Репутация:   0  


Цитата(silver47 @ 11.3.2011, 12:02) *
QHBoxLayout *mainLay = new QHBoxLayout(this);
mainLay->addWidget(btn = new QPushButton("SomeText"));
mainLay->addWidget(edit = new QLineEdit);
this->setLayout(mainLay);

Все нормально работает и растягивается на весь размер виджета.

P.S.: Попробуй через запятую указать коэфициент изменения размеров, по-умолчанию он 0, поставь по 1ке.


Спасибо, что оперативно ответили.
Я уже решил таким способом:
   lineEdit = new QLineEdit (this);
    button = new QToolButton (this);

    layout = new QHBoxLayout (this);
    layout->setMargin(0);
    layout->setSpacing(0);
    layout->addWidget(lineEdit);
    layout->addWidget(button);
    button->setSizePolicy (QSizePolicy::Fixed,QSizePolicy::Minimum);
    lineEdit->setSizePolicy( QSizePolicy::Preferred,QSizePolicy::Preferred);


Теперь у меня другой вопрос:
Когда этот класс использую как делегат, то когда нажимаешь на кнопку редактирование прекращается и делегат закрывается, а вот если сперва щелкнуть по полю редактирования, то потом уже можно на кнопку нажимать. Как сделать чтобы можно было сразу клацать по кнопке?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
silver47
  опции профиля:
сообщение 11.3.2011, 14:14
Сообщение #4


Активный участник
***

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

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




Репутация:   6  


Цитата(kunashir @ 11.3.2011, 14:51) *
Теперь у меня другой вопрос:
Когда этот класс использую как делегат, то когда нажимаешь на кнопку редактирование прекращается и делегат закрывается, а вот если сперва щелкнуть по полю редактирования, то потом уже можно на кнопку нажимать. Как сделать чтобы можно было сразу клацать по кнопке?


А кнопка то что делает? Если требе сначала щёлкнуть по полю ввода, а потом тыкать кнопку, поставьте курсор на поле ввода в конструкторе класса.

lineEdit->setFocus(), но тогда зачем всеже кнопка :)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
kunashir
  опции профиля:
сообщение 11.3.2011, 14:17
Сообщение #5


Новичок


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

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




Репутация:   0  


Цитата(silver47 @ 11.3.2011, 14:14) *
А кнопка то что делает? Если требе сначала щёлкнуть по полю ввода, а потом тыкать кнопку, поставьте курсор на поле ввода в конструкторе класса.

lineEdit->setFocus(), но тогда зачем всеже кнопка :)


Как раз редактировать поле ввода не надо - в идеале можно только посмотреть что там есть, а кнопка нужна чтобы вызвать другую форму (это хочу использовать для работы с внешними ключами таблицы БД - т.е. по кнопки доступ к таблице ключа).
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
silver47
  опции профиля:
сообщение 11.3.2011, 14:25
Сообщение #6


Активный участник
***

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

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




Репутация:   6  


Попробуй в конструкоре класа делегата
lineEdit->setReadOnly(true);
button->setFocus();

Вроде делегат должен отрисовываться нормально.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
kunashir
  опции профиля:
сообщение 11.3.2011, 14:29
Сообщение #7


Новичок


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

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




Репутация:   0  


Цитата(silver47 @ 11.3.2011, 14:25) *
Попробуй в конструкоре класа делегата
lineEdit->setReadOnly(true);
button->setFocus();

Вроде делегат должен отрисовываться нормально.


Он то отрисовывается нормально, а вот нажать на кнопку можно только после того как ввод получить LineEdit.
Такое впечатление, что любое клик не по полю ввод расценивается как конец редактирование - закрытие делегата.
Но когда в качестве делегата используется SpinBox, то можно сразу по кнопкам тыкать.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
silver47
  опции профиля:
сообщение 11.3.2011, 14:32
Сообщение #8


Активный участник
***

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

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




Репутация:   6  


Ошибка в делегате. Закройте эту тему и создайте новую в Моделях\Представляниях, но там без полного текста класса делегата делать нечего :).
Необходимо по крайней мере переопределить методы:
createEditor
setEditorData
setModelData
updateEditorGeometry
paint

Сообщение отредактировал silver47 - 11.3.2011, 14:35
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

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


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




RSS Текстовая версия Сейчас: 3.12.2020, 13:29