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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: управление MainWidget'ом через диалог  (Прочитано 6190 раз)
МП©
Гость
« : Март 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 и С++, заранее благодарю
« Последнее редактирование: Март 03, 2012, 14:38 от МП© » Записан
Bepec
Гость
« Ответ #1 : Март 03, 2012, 12:30 »

читай про сигнал-слоты в Ассистенте.
Записан
BRE
Гость
« Ответ #2 : Март 03, 2012, 13:55 »

читай про сигнал-слоты в Ассистенте.
Очередной поток мыслей не относящихся к вопросу...
Иди "Мурзилку" читать...

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

Сообщений: 4747



Просмотр профиля WWW
« Ответ #3 : Март 03, 2012, 14:14 »

ну так это при условии, что диалог модальный Подмигивающий
Записан

Изучением 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
BRE
Гость
« Ответ #4 : Март 03, 2012, 14:22 »

ну так это при условии, что диалог модальный Подмигивающий
Ну те коннекты, которые привел ТС, как раз говорят про это.
Записан
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #5 : Март 03, 2012, 14:25 »

ну так это при условии, что диалог модальный Подмигивающий
Ну те коннекты, которые привел ТС, как раз говорят про это.
К тому же
диалог dialog.ui c label2 и кнопками "ok" и "cansel"
явно указывает на модальность )
Записан

Qt 5.11/4.8.7 (X11/Win)
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4747



Просмотр профиля WWW
« Ответ #6 : Март 03, 2012, 14:32 »

ну так это при условии, что диалог модальный Подмигивающий
Ну те коннекты, которые привел ТС, как раз говорят про это.

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

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

Изучением 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
МП©
Гость
« Ответ #7 : Март 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() );
       }
 
но не работает
Записан
BuRn
Гость
« Ответ #8 : Март 03, 2012, 14:37 »

создаешь сигнал, в котором ты будешь передавать тип шрифта . вешаешь в твоей форме обработчик на поиск этого сигнала . После делаешь в своей новой форме(диалог которая) при нажатии на кноку ok эмит сигнал который ты создал и  в качестве пареметров передаешь фрифт, и в обработчике главной формы на твой сигнал вешаешь слот который будет применять твой переданный шрифт в сигнале на твою лабел .Сори если выразился непонятно. Суть что передать через сигнал твой шрифт и слотом уже от главной формы , который будет обрабатывать твой сигнал, который передает фрифт обработать уже этот шрифт(применить)
Записан
МП©
Гость
« Ответ #9 : Март 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);
}
 
 

но шрифт не меняется, чего не хватает?
Записан
mutineer
Гость
« Ответ #10 : Март 06, 2012, 18:42 »

Код
C++ (Qt)
void Dialog::slotFont()
{
   MainWindow win(this);
   win.label_2->setFont(m_FValue);
}

Создаешь новое окно, ставишь ему шрифт, а затем оно уничтожается
Вывод: учить С++
Записан
Kurles
Бывалый
*****
Offline Offline

Сообщений: 480



Просмотр профиля
« Ответ #11 : Март 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() );
       }
Записан

Код
C++ (Qt)
while(!asleep()) sheep++;
МП©
Гость
« Ответ #12 : Март 06, 2012, 19:18 »

выдает ошибку
Код
C++ (Qt)
mainwindow.cpp:45: ошибка: 'class Dialog' has no member named 'getLabelfont'
хотя все вроде обозначил
Записан
МП©
Гость
« Ответ #13 : Март 06, 2012, 19:23 »

аа, заработало, нашел ошибку
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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