Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: antonio от Декабрь 13, 2011, 23:48



Название: И как же сделать такое...
Отправлено: antonio от Декабрь 13, 2011, 23:48
Доброй всем ночи.
Недавно начал изучать Qt и сейчас столкнулся с проблемой: реализую интерфейс со "вкладками" с помощью Layout'ов. В одну из вкладок добавляю некий текст и две кнопки. Но по неизвестной мне причине, кнопки сдвигаются от левой границы. В чем может быть дело? вот код:
Код:
 QSignalMapper *m_main = new QSignalMapper(this);
    QSignalMapper *m_profile = new QSignalMapper(this);
    QSignalMapper *m_settings = new QSignalMapper(this);

    setMaximumSize(1000, 900);
    setMinimumSize(300, 250);
    resize(400, 400);

    setWindowTitle("YProject");
    QVBoxLayout *mainLayout = new QVBoxLayout;
    mainLayout->setMargin(2);
    mainLayout->setSpacing(4);

    QFont displayFont;
    displayFont.setPixelSize(100);

    QTabWidget *tabs = new QTabWidget;

    QWidget *mainTab = new QWidget;
    QFormLayout *mainTabLayout = new QFormLayout;

    mainTabLayout->setSizeConstraint(QLayout::SetFixedSize);
    mainTabLayout->setSpacing(00);


    mainTabLayout->addRow("Name ", new QLabel);


    QPushButton *button1 = new QPushButton("but1");
    mainTabLayout-> addWidget(button1);

    QPushButton *button2 = new QPushButton("but2");
    mainTabLayout-> addWidget(button2);


    mainTab->setLayout(mainTabLayout);
    tabs->addTab(mainTab, "Main");

//вкладка Профиль

    QWidget *profileTab = new QWidget;
    QFormLayout *profileTabLayout = new QFormLayout;
    profileTabLayout->setMargin(4);
    profileTabLayout->setSpacing(0);

    profileTab->setLayout(profileTabLayout);
    tabs->addTab(profileTab, "Profile");

    mainLayout->addWidget(tabs);
    setCentralWidget(new QWidget);
    centralWidget()->setLayout(mainLayout);

//вкладка Настройки

    QWidget *settingsTab = new QWidget;
    QFormLayout *settingsTabLayout = new QFormLayout;
    settingsTabLayout->setMargin(4);
    settingsTabLayout->setSpacing(0);

    settingsTab->setLayout(settingsTabLayout);
    tabs->addTab(settingsTab, "Settings");

    mainLayout->addWidget(tabs);
    setCentralWidget(new QWidget);
    centralWidget()->setLayout(mainLayout);

ЗЫ. сори за быдло код


Название: Re: И как же сделать такое...
Отправлено: Rem Norton от Декабрь 14, 2011, 00:10
Подсказка: Size policy. Ну и про QSpacerItem почитать не вредно.

В документации все описано.

P.S. А формы удобнее всего создавать в режиме дизайна.


Название: Re: И как же сделать такое...
Отправлено: antonio от Декабрь 14, 2011, 00:34
спасибо, буду читать тогда документацию :)
про формы полностью согласен, просто решил опробовать и такое создание :)


Название: Re: И как же сделать такое...
Отправлено: antonio от Декабрь 14, 2011, 01:12
чего то я все таки не понимаю... использую такую конструкцию:
Код:
    QPushButton *button1 = new QPushButton("but1");
    button1->setSizePolicy(QSizePolicy::Ignored, QSizePolicy::Maximum);

    QPushButton *button2 = new QPushButton("but2");
    button2->setSizePolicy(QSizePolicy::Ignored, QSizePolicy::Maximum);
При таком использовании QSizePolicy получается, что кнопки как будто прячутся за невидимую стенку и видно только их краи (несколько пикселей). При попытке использовать другие опции для QSizePolicy кнопки так и остаются в стороне. Какие же тогда опции надо использовать?


Название: Re: И как же сделать такое...
Отправлено: Rem Norton от Декабрь 14, 2011, 20:10
Fixed, ну и SpacerItem в придачу. Кстати эти все вещи в литературе довольно подробно описаны. У того же Шлее. Рекомендую прочесть.