Re[2]: Как правильно понимать QSizePolicy?
От: baf  
Дата: 14.12.11 20:08
Оценка:
Здравствуйте, romankr, Вы писали:

R>я думаю, логично было бы внимательно посмотреть SizePolicy у дефолтной кнопки ;) В данном случае вы немного перепутали, надо вот так:

R>
R>setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Fixed);
R>


Да, и правда, перепутал. Но этот вариант тоже не работает.

R>К тому же, есть вот еще один момент.

>> Т.е. был фиксирован по высоте, не сжимался бы по ширине меньше заданного размера,
R>минимальный размер можно выставит руками с помощью функции setMinimumSize().
Я сделал по другому — перегрузил minimumSizeHint().

Проблема ещё в том, что sizeHint — у виджета меняется. И так как у кнопки, — когда её размер меняется (допустим при изменении текста), то менеджер компоновки под него подстраивается, — у меня сделать с моим виджетом не получается.

  пример иллюстрирующий поведение кнопки, которое я хочу реализовать в своём виджете
#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>

class QPushButton;

class Widget : public QWidget
{
    Q_OBJECT
public:
    Widget(QWidget *parent = 0);

private:
    QPushButton *m_btn;

private slots:
    void changeBtnText(QString text);
};

#endif // WIDGET_H


#include "widget.h"

#include <QVBoxLayout>
#include <QLineEdit>
#include <QPushButton>
#include <QVBoxLayout>
#include <QHBoxLayout>

Widget::Widget(QWidget *parent)
    : QWidget(parent),
      m_btn(new QPushButton("btn"))
{
    QPushButton *btn2 = new QPushButton("btn #2");

    QLineEdit *lineEdit = new QLineEdit;
    connect(lineEdit, SIGNAL(textChanged(QString)), SLOT(changeBtnText(QString)));

    QHBoxLayout *btnLay = new QHBoxLayout;
    btnLay->addWidget(m_btn);
    btnLay->addWidget(btn2,1);

    QVBoxLayout *mainLay = new QVBoxLayout;
    mainLay->addLayout(btnLay);
    mainLay->addWidget(lineEdit);

    setLayout(mainLay);
}

void Widget::changeBtnText(QString text)
{
    m_btn->setText(text);
}


Да, надо видимо поковырять код QPushButton в исходниках библиотеки, но толком не понимая принципа сложновато это делать, для этого ещё QLayout и иже с ним ковырять придёться.
Может кто-нибудь уже знает решение моей проблемы?

Моя же задача такая: пользователь открывает картинку из файла, она должна в моём виджете отобразиться, а мой виджет под неё подстроиться. Мой виджет в QHBoxLayout скомпонован с панелью управления. Сейчас мой виджет не меняет размеров и приходиться ручками окно маштабировать, чтобы картинку увидеть.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.