Russian Qt Forum

Qt => Вопросы новичков => Тема начата: МП© от Март 03, 2012, 12:22



Название: управление MainWidget'ом через диалог
Отправлено: МП© от Март 03, 2012, 12:22
Имеется главная форма mainwidget.ui с label1 и диалог dialog.ui c label2 и кнопками "ok" и "cansel"
В диалоге пользователь меняет шрифт label2 и подтверждает кнопкой "ok".
Как сделать, чтобы при нажатии кнопки "ok" на диалоге, менялся шрифт label1 на главной форме на шрифт, который установил пользователь для label2?

в dialog.cpp
Код
C++ (Qt)
connect(ui->buttonBox, SIGNAL(accepted()), this, SLOT(accept()));
connect(ui->buttonBox, SIGNAL(rejected()), this, SLOT(reject()));
 

PS начинающий QT и С++, заранее благодарю


Название: Re: управление MainWidget'ом через диалог
Отправлено: Bepec от Март 03, 2012, 12:30
читай про сигнал-слоты в Ассистенте.


Название: Re: управление MainWidget'ом через диалог
Отправлено: BRE от Март 03, 2012, 13:55
читай про сигнал-слоты в Ассистенте.
Очередной поток мыслей не относящихся к вопросу...
Иди "Мурзилку" читать...

2 МП©
Метод exec() диалога возвращает состояние, при котором он был закрыт:
Код
C++ (Qt)
{
   Dialog dlg( this );
   if( dlg.exec() == QDialog::Accepted )
   {
       mainwidget->label1->setFont( dlg.font() );
   }
}
 


Название: Re: управление MainWidget'ом через диалог
Отправлено: kambala от Март 03, 2012, 14:14
ну так это при условии, что диалог модальный ;)


Название: Re: управление MainWidget'ом через диалог
Отправлено: BRE от Март 03, 2012, 14:22
ну так это при условии, что диалог модальный ;)
Ну те коннекты, которые привел ТС, как раз говорят про это.


Название: Re: управление MainWidget'ом через диалог
Отправлено: GreatSnake от Март 03, 2012, 14:25
ну так это при условии, что диалог модальный ;)
Ну те коннекты, которые привел ТС, как раз говорят про это.
К тому же
диалог dialog.ui c label2 и кнопками "ok" и "cansel"
явно указывает на модальность )


Название: Re: управление MainWidget'ом через диалог
Отправлено: kambala от Март 03, 2012, 14:32
ну так это при условии, что диалог модальный ;)
Ну те коннекты, которые привел ТС, как раз говорят про это.

а, точно, недоглядел
К тому же
диалог dialog.ui c label2 и кнопками "ok" и "cansel"
явно указывает на модальность )

ну это ещё не факт :) можно ж и немодальный сделать с ок/отмена, пусть это и не совсем хороший подход.


Название: Re: управление MainWidget'ом через диалог
Отправлено: МП© от Март 03, 2012, 14:32
диалог - модальный.

работает:
Код
C++ (Qt)
Display dialog(this);
        if( dialog.exec() == QDialog::Accepted )
       {
           ui->label1->setFont( dialog.font() );
       }
 

но применяется шрифт диалога, а не измененного label2
 
пробую чтото подобное:
Код
C++ (Qt)
Display dialog(this);
        if( dialog.exec() == QDialog::Accepted )
       {
           ui->label1->setFont( dialog.ui->label2->font() );
       }
 
но не работает


Название: Re: управление MainWidget'ом через диалог
Отправлено: BuRn от Март 03, 2012, 14:37
создаешь сигнал, в котором ты будешь передавать тип шрифта . вешаешь в твоей форме обработчик на поиск этого сигнала . После делаешь в своей новой форме(диалог которая) при нажатии на кноку ok эмит сигнал который ты создал и  в качестве пареметров передаешь фрифт, и в обработчике главной формы на твой сигнал вешаешь слот который будет применять твой переданный шрифт в сигнале на твою лабел .Сори если выразился непонятно. Суть что передать через сигнал твой шрифт и слотом уже от главной формы , который будет обрабатывать твой сигнал, который передает фрифт обработать уже этот шрифт(применить)


Название: Re: управление MainWidget'ом через диалог
Отправлено: МП© от Март 06, 2012, 18:24
Сделал вот так:
Код
C++ (Qt)
Dialog::Dialog(QWidget *parent) :
   QDialog(parent),
   ui(new Ui::Disp)
{
   ui->setupUi(this);
   m_FValue = ui->label->font();
   QObject::connect(ui->pushButton,SIGNAL(clicked()),this,SLOT(slotFont()));
}
 
void Dialog::slotFont()
{
   MainWindow win(this);
   win.label_2->setFont(m_FValue);
}
 
 

но шрифт не меняется, чего не хватает?


Название: Re: управление MainWidget'ом через диалог
Отправлено: mutineer от Март 06, 2012, 18:42
Код
C++ (Qt)
void Dialog::slotFont()
{
   MainWindow win(this);
   win.label_2->setFont(m_FValue);
}

Создаешь новое окно, ставишь ему шрифт, а затем оно уничтожается
Вывод: учить С++


Название: Re: управление MainWidget'ом через диалог
Отправлено: Kurles от Март 06, 2012, 18:47
в классе Dialog добавляешь функцию, кот. будет вытаскивать нужный фонт с лабела:

Код
C++ (Qt)
QFont Dialog::getLabelFont()
{
    return ui->label->font();
}

в MainWindow:

Код
C++ (Qt)
        Display dialog(this);
        if( dialog.exec() == QDialog::Accepted )
       {
           ui->label1->setFont( dialog.getLabelFont() );
       }


Название: Re: управление MainWidget'ом через диалог
Отправлено: МП© от Март 06, 2012, 19:18
выдает ошибку
Код
C++ (Qt)
mainwindow.cpp:45: ошибка: 'class Dialog' has no member named 'getLabelfont'
хотя все вроде обозначил


Название: Re: управление MainWidget'ом через диалог
Отправлено: МП© от Март 06, 2012, 19:23
аа, заработало, нашел ошибку