Russian Qt Forum
Сентябрь 30, 2024, 12:26 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1] 2   Вниз
  Печать  
Автор Тема: О формах..  (Прочитано 9906 раз)
brucemax
Гость
« : Ноябрь 10, 2011, 10:13 »

Здравствуйте..  Картина такая..  есть приложение, внизу формы ряд кнопок, которые присутствуют всегда..  В процессе работы меняется только содержание над кнопками.. Можно ли сделать (и как) так, что бы кнопки как бы находились на отдельной форме..  а сверху по необходимости выводить формы с информацией..  а не рисовать на каждой форме те же кнопки и подключать их заново..??  Может туманно объяснил..  тогда извините) (опыта пока совсем нету))  Спасибо заранее!)
Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4744



Просмотр профиля WWW
« Ответ #1 : Ноябрь 10, 2011, 11:39 »

поместить кнопки на отдельный виджет
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
brucemax
Гость
« Ответ #2 : Ноябрь 10, 2011, 12:02 »

Нашёл класс.. stackedWidget..  который может хранить страницы..  (то есть кнопки находяться вне stackedWidget, а всё остальное там)теперь возник вопрос можно ли в качестве очередной страницы использовать другую форму, сделанную в отдельном файле *.ui.  И если да, то как это сделать..?
Записан
twp
Гость
« Ответ #3 : Ноябрь 10, 2011, 12:07 »

QUiLoader QFormBuilder
« Последнее редактирование: Ноябрь 10, 2011, 12:08 от twp » Записан
brucemax
Гость
« Ответ #4 : Ноябрь 10, 2011, 14:14 »

QUiLoader QFormBuilder
Нашёл у Бланшета такой пример..
Код:
QUiLoader uiLoader;
QFile file("sortdialog.ui");
QWidget *sortDialog = uiLoader.load(&file);
Здесь мы говорим что файл sortdialog.ui подгружаемый..? и где это писать надо?(
Записан
brucemax
Гость
« Ответ #5 : Ноябрь 10, 2011, 15:11 »

Вот пример приведу..  делаю я главную форму в дизайнере..  внизу кнопки..  сверху stackWidget..  и хочу чтобы в роли страниц в этом stackWidget выступали созданные мной в отдельных ui файлах формы. То есть исходный файл главной формы у меня такой:
Код:
#include <QFormBuilder>
#include "okno.h"
#include "ui_okno.h"
class QFormBuilder;
okno::okno(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::okno)
{
    ui->setupUi(this);

    QFormBuilder builder;
    QFile file("form.ui");
    file.open(QFile::ReadOnly);
    QWidget *mywidget = builder.load(&file, this);
    file.close();

    stackedWidget->addWidget(mywidget);

}

okno::~okno()
{
    delete ui;
}
Но всплывает  ошибка: QFormBuilder: Нет такого файла или каталога..   Что я не так сделал?
Записан
Странник
Гость
« Ответ #6 : Ноябрь 10, 2011, 15:46 »

class QFormBuilder уберите.
Записан
twp
Гость
« Ответ #7 : Ноябрь 10, 2011, 15:48 »

To link against the module, add this line to your qmake .pro file:

 CONFIG += designer
Записан
brucemax
Гость
« Ответ #8 : Ноябрь 10, 2011, 16:27 »

Вот так заработало:!!!
Код:
#include "okno.h"
#include "ui_okno.h"

okno::okno(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::okno)
{
    ui->setupUi(this);

    QUiLoader loader;
        QFile file("form.ui");
        file.open(QFile::ReadOnly);
        QWidget *myWidget = loader.load(&file, this);
        file.close();

        QVBoxLayout *layout = new QVBoxLayout;
        layout->addWidget(myWidget);
        setLayout(layout);

}

okno::~okno()
{
    delete ui;
}
Записан
brucemax
Гость
« Ответ #9 : Ноябрь 10, 2011, 16:29 »

To link against the module, add this line to your qmake .pro file:

 CONFIG += designer

Для QUiLoder я писал в профайле: CONFIG += uitools  и оно заработало.. в чём разница?
Записан
twp
Гость
« Ответ #10 : Ноябрь 10, 2011, 16:50 »

в разных модулях находятся. Если посмотреть в верху в асистенте то там есть такое
Home > Modules > QtUiTools > QUiLoader
Home > Modules > QtDesigner > QFormBuilder

просто тогда заходишь на страницу модуля и находишь что нужно добавить в pro файл
Записан
brucemax
Гость
« Ответ #11 : Ноябрь 10, 2011, 17:20 »

в разных модулях находятся. Если посмотреть в верху в асистенте то там есть такое
Home > Modules > QtUiTools > QUiLoader
Home > Modules > QtDesigner > QFormBuilder

просто тогда заходишь на страницу модуля и находишь что нужно добавить в pro файл
Спасибо!!! Большое!  А если нетрудно..  вот хочу чтобы кнопка созданная в дизайнере на главной форме закрывала эту загруженную форму..  пишу..
Код:
#include "okno.h"
#include "ui_okno.h"

okno::okno(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::okno)
{
    ui->setupUi(this);
    QPushButton pushButton_1;

    QUiLoader loader;
        QFile file("form.ui");
        file.open(QFile::ReadOnly);
        QWidget *myWidget = loader.load(&file, this);
        file.close();
        myWidget->show();

       connect(pushButton_1, SIGNAL(clicked()), myWidget, SLOT(close()));

}
okno::~okno()
{
    delete ui;
}
Вопрос..  так я делал кнопку в дизайнере я думал её не надо декларировать в конструкторе..  но без
QPushButton pushButton_1;  она пишет ‘pushButton_1’ was not declared in this scope.  Когда декларирую пишет:
 ошибка: no matching function for call to ‘okno::connect(QPushButton&, const char [11], QWidget*&, const char [9])’, 
а вот когда декларирую как указатель QPushButton *pushButton_1 оно компилируется, но с ворнингом и кнопка не работает.. 
А в чём кстати отличие QUiLoder от QFormBuilder..  читал литературу там в описании QUiLoder сказано: If you have a custom component or an application that embeds Qt Designer, you can also use the QFormBuilder class provided by the QtDesigner module to create user interfaces from UI files. Но в чём отличие всё равно не понял....
Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4744



Просмотр профиля WWW
« Ответ #12 : Ноябрь 10, 2011, 18:30 »

а не проще создать свой класс-наследник QWidget? Улыбающийся
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
joker
Новичок

Offline Offline

Сообщений: 49


Просмотр профиля
« Ответ #13 : Ноябрь 11, 2011, 06:34 »

а не проще создать свой класс-наследник QWidget? Улыбающийся

ага, ага Улыбающийся

имхо слишком сильно углубились в не совсем подходящую технологию.

Я такое (ну подобное) реализовал так:

На MainWindow кладется виджет (ну centralWidget). В этом виджете - 2 других виджета (точнее сначала один - кнопки (у меня слева были) и  рабочий. Виджет с кнопками загнан в минимально необходимые размеры. При жмяке кнопок создаем свой виджет (любой) и добавляем его в свой (ну и там удаляем предыдущий, если такой был). 



Записан
brucemax
Гость
« Ответ #14 : Ноябрь 11, 2011, 10:36 »


Я такое (ну подобное) реализовал так:

На MainWindow кладется виджет (ну centralWidget). В этом виджете - 2 других виджета (точнее сначала один - кнопки (у меня слева были) и  рабочий. Виджет с кнопками загнан в минимально необходимые размеры. При жмяке кнопок создаем свой виджет (любой) и добавляем его в свой (ну и там удаляем предыдущий, если такой был). 

Вот..  я уже дошёл до этой мысли..  сделал вот так:
Код:
#include "okno.h"
#include "ui_okno.h"

okno::okno(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::okno)
{
    ui->setupUi(this);

        QUiLoader loader1;
            QFile file1("form1.ui");
            file1.open(QFile::ReadOnly);
            QWidget *myWidget1 = loader1.load(&file1, ui->widget);
            file1.close();

         connect(ui->pushButton_1, SIGNAL(clicked()), myWidget1, SLOT(show()));
         connect(ui->pushButton_2, SIGNAL(clicked()), myWidget1, SLOT(close()));
}

okno::~okno()
{
    delete ui;
}

но есть проблемка..  надо чтобы пр и изменении размеров главного оокна изменялись и размеры фложенной в widget формы.. а она этого не делает..  при том что к загружаемой форме применен компоновщик по сетке..  и установлена политика expanding..  виджет на главной форме (куда вставляется загружаемая) тоже с политикой expanding..  и ко всей главной форме применён компоновщик..   а загружаемая форма всё равно не масштабируется вместе с главной..  В чём может быть проблема??  Помогите пожалуста..  может я что упустил..
Записан
Страниц: [1] 2   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.13 секунд. Запросов: 23.