crossplatform.ru

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


  Ответ в Динамическое размещение элементов формы.
Введите ваше имя
Подтвердите код

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

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


Последние 10 сообщений [ в обратном порядке ]
SABROG Дата 31.1.2010, 16:02
 
Цитата(fe120 @ 31.1.2010, 0:21) *
qt designer и qml?


У них совершенно разное направление. QML никогда не заменит обычные создание приложений на виджетах. Это как сравнить Style Sheets с QPainter'ом. Если без стилей можно обойтись, то без QPainter'a нет. То, что ты не можешь сделать с помощью стилей ты можешь реализовать сам. QML это скрипт, который позволяет манипулировать базовыми элементами сцены используя её функционал без необходимости писать всё на С++ через методы и классы. Если подумать, то QML мог бы быть как .ui файлы, в виде xml'я, а для него был бы аналогичный компилятор типа uic, который бы превращал xml в С++ код с классами для QGraphicsView. Вместо яваскрипа были бы сигналы, которые бы связывались со слотами на C++. Но смысл то ведь в том, что это декларативный подход - глаза не видят, а руки делают. Презентации наверно удобно было бы делать. Работать с мультимедией. Короче это всё-равно что выбрать игровой 3D движок для создания бухгалтерской программы, где тебе нужно зачистить деревню повстанцев, а в конце миссии тебе отдадут годовой отчет. Кстати этот подход мне ужасно не нравится в Mass Effect 2. Там есть космический корабль, капитаном которого ты являешься, так вот, чтобы изучить какой-то апгрейд или просто рубашку сменить нужно пробежать пол корабля в свою кабину или другой отсек, на лифте туда сюда поездить. Очень раздражает, что нет единого меню откуда можно было бы всё сделать без необходимости пол минуты ждать пока загрузится палуба на которую ты приехал, чтобы посмотреть свои achievements. Вот и QML такой же, пол жизни тратишь на просмотр анимации растворения, перемещения, вместо того, чтобы получить моментальный результат.
Litkevich Yuriy Дата 31.1.2010, 0:42
 
Цитата(fe120 @ 31.1.2010, 3:21) *
А вообще создания формы чисто средствами кодинга, без drag and drop'ывания элементов, это моветоном еще не считается?
в доке по Qt сказано, что компоновщики были придуманы для облегчения создания графического интерфейса именно в коде

Цитата(fe120 @ 31.1.2010, 3:21) *
Или так сказать будующее за qt designer и qml?
поживём увидим, пока QML очень сырой
fe120 Дата 31.1.2010, 0:21
  Ох. 2 ответа и оба в точку. Премного благодарен.

А вообще создания формы чисто средствами кодинга, без drag and drop'ывания элементов, это моветоном еще не считается?
Или так сказать будующее за qt designer и qml?
MoPDoBoPoT Дата 30.1.2010, 14:45
  Не в тему:
1.
Цитата(fe120 @ 30.1.2010, 13:12) *
anyInformation->~QTextEdit();

Не вызывай напрямую деструктор, он не освобождает память. Для этого есть delete (он вызывает деструктор и освобождает память).
2. В твоем случае нет необходимости постоянно создавать/удалять QTextEdit. Пользуйся методами show()/hide().
Litkevich Yuriy Дата 30.1.2010, 14:12
  Самое простое решение:
вызывай adjustSize() самого окна, для регулировки размера
fe120 Дата 30.1.2010, 13:12
  Доброго времени суток.
На своем этапе развития экспериментирую с созданием и уничтожением элементов на форме. Не использую qt designer. В качестве руководства используется Макс Шлее - QT Профессиональное программирование на C++, и соответственно принципы создания элементов описанных в этой книге.

Так вот к сути:
Есть функция создания слоя и помещения слоя в QGroupBox
Раскрывающийся текст
void Mainform::createSelect(){
    showRecordBox = new QGroupBox(trUtf8("Просмотр записей:"));
    loginButton = new QPushButton(trUtf8("Тут логин"));
    passwordButton = new QPushButton(trUtf8("Тут пароль"));
    selectLayout = new QGridLayout;
    selectLayout->setSpacing(2);
    selectLayout->setMargin(0);
    selectLayout->setAlignment(Qt::AlignTop);
    selectNameBox = new QComboBox;
    selectNameBox->setMinimumWidth(120);
    selectNameBox->addItem("lol");
    selectNameBox->addItem("lol2");
    selectNameBox->addItem("lol3");
    namesLabel = new QLabel(trUtf8("Название:"));
    loginLabel = new QLabel(trUtf8("Логин:"));
    passLabel = new QLabel(trUtf8("Пароль:"));
    showAnyInform = new QCheckBox(trUtf8("Доп. информация"));
    [b]connect(showAnyInform,SIGNAL(toggled(bool)),SLOT(changeStateShowAnyInform()));[/b]

    selectLayout->addWidget(namesLabel,0,0,1,1);
    selectLayout->addWidget(selectNameBox,0,1,1,1);
    selectLayout->addWidget(loginLabel,1,0,1,1);
    selectLayout->addWidget(loginButton,1,1,1,1);
    selectLayout->addWidget(passLabel,2,0,1,1);
    selectLayout->addWidget(passwordButton,2,1,1,1);
    selectLayout->addWidget(showAnyInform,3,0,1,2);
    showRecordBox->setMaximumWidth(showRecordBox->width());
    showRecordBox->setLayout(selectLayout);
}

сигнал (showAnyInform,SIGNAL(toggled(bool)) связан со следующей функцией:

Раскрывающийся текст
void Mainform::changeStateShowAnyInform(){
    if(showAnyInform->isChecked()) {
        formSize=showRecordBox->size();
        anyInformation = new QTextEdit;
        selectLayout->addWidget(anyInformation,4,0,1,2);
    }
    else {selectLayout->removeWidget(anyInformation);anyInformation->~QTextEdit();}
}

Итогом всего этого является следующее:


Игрался с resize(int,int), с showRecordBox->adjustSize(), showRecordBox->sizeHint(), безрезультатно, форма не принимает исходных размеров. В чем ошибка и как наиболее правильнее будет реализовать подобное.
Заранее спасибо.
Просмотр темы полностью (откроется в новом окне)
RSS Текстовая версия Сейчас: 3.5.2024, 12:00