crossplatform.ru

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

 
Ответить в данную темуНачать новую тему
> Изменение одного виджета через другой, QMainWidget + QDialog
QTchaynik
  опции профиля:
сообщение 3.3.2012, 11:55
Сообщение #1


Новичок


Группа: Новичок
Сообщений: 5
Регистрация: 3.3.2012
Пользователь №: 3246

Спасибо сказали: 0 раз(а)




Репутация:   0  


Имеется главная форма mainwidget.ui с label1 и диалог dialog.ui c label2 и кнопками "ok" и "cansel"
В диалоге пользователь меняет шрифт label2 через FontDialog и подтверждает кнопкой "ok".
Как сделать, чтобы при нажатии кнопки "ok" на диалоге, менялся шрифт label1 на главной форме?

в dialog.cpp
connect(ui->buttonBox, SIGNAL(accepted()), this, SLOT(accept()));
connect(ui->buttonBox, SIGNAL(rejected()), this, SLOT(reject()));


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


Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
RazrFalcon
  опции профиля:
сообщение 3.3.2012, 12:40
Сообщение #2


Zombie Mod
*****

Группа: Участник
Сообщений: 1654
Регистрация: 24.5.2010
Из: Харьков
Пользователь №: 1752

Спасибо сказали: 64 раз(а)




Репутация:   212  


1) По нажатию "Ок" в дочернем окне оно закрывается, а потом уже меняется шрифт? Тогда:
void MainWindow::open_newWindow_slot()
{
    MyDialog dialog(0);
    if (dialog.exec()) {
        ui->label->setFont(dialog.newFont()); // newFont - это публичная функция класса MyDialog, которая должна возвращать имя шрифта, который выбран в чекбоксе
    }
}
2) Если у вас дочернее окно не закрывается, а как бы аналог "Apply". То есть изменения вступают в силу сразу же. То в конструктор класса MyDialog добавьте ссылку на MainWindow, как то так:
public:
    explicit MyDialog(MainWindow *window, QWidget *parent = 0);



Оба варианта уже 100 раз поднимались на этом форуме, в поиске много примеров.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
QTchaynik
  опции профиля:
сообщение 3.3.2012, 18:18
Сообщение #3


Новичок


Группа: Новичок
Сообщений: 5
Регистрация: 3.3.2012
Пользователь №: 3246

Спасибо сказали: 0 раз(а)




Репутация:   0  


первый нужный вариант не работает, выдает ошибку
ошибка: 'class MyDialog' has no member named 'newFont'

и при чем здесь чекбокс? если шрифт от лэйбла нужен
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
RazrFalcon
  опции профиля:
сообщение 3.3.2012, 19:43
Сообщение #4


Zombie Mod
*****

Группа: Участник
Сообщений: 1654
Регистрация: 24.5.2010
Из: Харьков
Пользователь №: 1752

Спасибо сказали: 64 раз(а)




Репутация:   212  


чекбокс -> ваш диалог шрифотов (попутал)

ошибка: 'class MyDialog' has no member named 'newFont'

ну правильно, я же написал "newFont - это публичная функция класса MyDialog"

создайте в MyDialog функцию
QString newFont();

которая будет выглядеть так:

QString MyDialog::newFont()
{
return string; // string содержит назание щрифта, который вы выбрали, задаете сами.
}
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
QTchaynik
  опции профиля:
сообщение 4.3.2012, 15:34
Сообщение #5


Новичок


Группа: Новичок
Сообщений: 5
Регистрация: 3.3.2012
Пользователь №: 3246

Спасибо сказали: 0 раз(а)




Репутация:   0  


Все равно не работает

Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
QTchaynik
  опции профиля:
сообщение 6.3.2012, 19:29
Сообщение #6


Новичок


Группа: Новичок
Сообщений: 5
Регистрация: 3.3.2012
Пользователь №: 3246

Спасибо сказали: 0 раз(а)




Репутация:   0  


Правильнее было:
QFont Dialog::getLabelFont()
{
     return ui->label->font();
}


в MainWindow:

         Display dialog(this);
         if( dialog.exec() == QDialog::Accepted )
        {
            ui->label1->setFont( dialog.getLabelFont() );
        }
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 29.11.2024, 11:26