Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets > Настройка QGridLayout


Автор: math64 1.2.2013, 22:08
Пишу программу пасьянс. Хочу редактировать форму для пасьянса в дизайнере.
На форму Board вставляю QCardStackWidget, производные от QWidget (может лучше наследоваться от другого класса?)
В QCardStackWidget переопределяю методы sizeHint() и minimumSizeHint() { return game->cardSize(); }
Устанавливаю QGridLayout.
Board::resizeEvent(QResizeEvent *) вычисляю размер карты.
Например, для Паука - ширина 1/10 ширины формы за вычетом полей и промежутков.
Вызываю QGridLayout:: setMinumumRowHeight() для строк - и QGridLayout располагает виджеты как я хочу,
но при этом не позволяет уменьшать размеры формы.

Автор: _GRIN_ 5.2.2013, 15:01
Цитата(math64 @  1.2.2013,  20:08 Найти цитируемый пост)
Устанавливаю QGridLayout.
Board::resizeEvent(QResizeEvent *) вычисляю размер карты.
Например, для Паука - ширина 1/10 ширины формы за вычетом полей и промежутков.
Вызываю QGridLayout:: setMinumumRowHeight() для строк - и QGridLayout располагает виджеты как я хочу,
но при этом не позволяет уменьшать размеры формы.


Ну так а чего ты хотел, ты по сути для Board (через его layout) задаёшь текущий размер как минимальный (по высоте) - следовательно по высоте его можно только увеличивать.

Автор: math64 5.2.2013, 19:24
Я это понимаю. Но нельзя ли настроить грид по другому?

Автор: _GRIN_ 6.2.2013, 10:40
Я не совсем понимаю, какого поведения ты хочешь добиться.
Я практически не пользуюсь дизайнером (за исключением стадии прототипа) - так что все финальные подгонки в коде.
Если в гриде надо расположить элементы как-то не стандартно (т.е. какие-то в клетках большего размера, какие-то меньшего), то просто при добавлении элемента в грид указываю rowSpan | columnSpan параметр.
Вот маленький пример.

Код

#include <QApplication>
#include <QGridLayout>
#include <QLabel>

class MyLabel : public QLabel
{
    int m_prefered_width;
    int m_prefered_height;
public:
    MyLabel( const QString& text,
             const int prefered_width,
             const int prefered_height )
        : QLabel( 0 )
        , m_prefered_width( prefered_width )
        , m_prefered_height( prefered_height )
    {
        setText( text );
        setFrameStyle( QFrame::Box | QFrame::Sunken );
        setAlignment( Qt::AlignCenter );
        setSizePolicy( QSizePolicy::Preferred, QSizePolicy::Preferred );
    }

    QSize sizeHint()  const
    {
        return QSize( m_prefered_height, m_prefered_height );
    }
};

int main( int argc, char** argv )
{
    QApplication app( argc, argv );

    QWidget main_window;

    QGridLayout*const grid = new QGridLayout( &main_window );

    grid->addWidget( new MyLabel( "1", 10, 10 ), 0, 0 );
    grid->addWidget( new MyLabel( "2", 10, 10 ), 0, 1 );
    grid->addWidget( new MyLabel( "3", 10, 10 ), 0, 2, 1, 2 );
    grid->addWidget( new MyLabel( "4", 10, 10 ), 1, 0 );
    grid->addWidget( new MyLabel( "5", 10, 90 ), 1, 1, 2, 2 );
    grid->addWidget( new MyLabel( "6", 10, 10 ), 1, 3 );
    grid->addWidget( new MyLabel( "7", 10, 10 ), 2, 0 );
    grid->addWidget( new MyLabel( "8", 10, 10 ), 2, 3 );
    grid->addWidget( new MyLabel( "9", 10, 10 ), 3, 0, 1, -1 );

    main_window.show();

    return app.exec();
}



P.S.
Думаю не сильно помог, но я правда не понимаю задачу

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)