crossplatform.ru

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


  Ответ в QHBoxLayout и дочерние виджеты
Введите ваше имя
Подтвердите код

Введите в поле код из 6 символов, отображенных в виде изображения. Если вы не можете прочитать код с изображения, нажмите на изображение для генерации нового кода.
 

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


Последние 10 сообщений [ в обратном порядке ]
silver47 Дата 11.3.2011, 14:32
  Ошибка в делегате. Закройте эту тему и создайте новую в Моделях\Представляниях, но там без полного текста класса делегата делать нечего :).
Необходимо по крайней мере переопределить методы:
createEditor
setEditorData
setModelData
updateEditorGeometry
paint
kunashir Дата 11.3.2011, 14:29
 
Цитата(silver47 @ 11.3.2011, 14:25) *
Попробуй в конструкоре класа делегата
lineEdit->setReadOnly(true);
button->setFocus();

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


Он то отрисовывается нормально, а вот нажать на кнопку можно только после того как ввод получить LineEdit.
Такое впечатление, что любое клик не по полю ввод расценивается как конец редактирование - закрытие делегата.
Но когда в качестве делегата используется SpinBox, то можно сразу по кнопкам тыкать.
silver47 Дата 11.3.2011, 14:25
  Попробуй в конструкоре класа делегата
lineEdit->setReadOnly(true);
button->setFocus();

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

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


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


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

lineEdit->setFocus(), но тогда зачем всеже кнопка :)
kunashir Дата 11.3.2011, 12:51
 
Цитата(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, 12:02
 
Цитата(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ке.
kunashir Дата 11.3.2011, 11:08
  Создал класс наследника от Layout: он содержит кнопку (PushButton) и поле ввода (LineEdit), а также QHBoxLayout, на котором предыдущие виджеты и располагаются.
Так проблема в том что это дочерние виджеты не занимаю все область Layout'а. А так как класс собираюсь использовать в качестве делегата - в ячейки QTableView это выглядит не очень... Вот собственно вопрос - как заставить внутренние виджеты занимать все доступную область.
Просмотр темы полностью (откроется в новом окне)
RSS Текстовая версия Сейчас: 29.3.2024, 18:51