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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Qt и всплывающие формы (диалоги, QWidget, QDialog)  (Прочитано 10186 раз)
SABROG
Гость
« : Апрель 16, 2007, 14:46 »

Мое слабое место это понимание особенностей классов, хочу сделать так:
- есть главное окно, наследник от QMainWindow, это один .ui файл
- есть несколько .ui форм.

Я хочу, чтобы из каждой формы были доступны любые компоненты QMainWindow. Понятно, что внутри класса не видно методы и объекты другого класса. Я так понимаю надо передавать в каждый класс указатель на моего наследника QMainWindow.

Можете примерчик подкинуть главной формы, которая вызывает наследника модального QDialog'а, который в свою очередь меняет что-либо на главной форме изнутри, например текст в QLineEdit.

А то видимо у меня проблема с оформлением наследия, т.к. компилятор не видет ни setupUi, ни ui.setupUi, ни setIcon в QDialog'e, да еще не хочет указатель на главную форму впихнуть в приватную переменную, т.к. дефолтное значение указателя 0, я его специально нулем и сделал, если ничего другого не передасться, чтобы проверить, но видимо я чего-то недопонимаю.
Записан
DenKa
Гость
« Ответ #1 : Апрель 16, 2007, 15:11 »

Актуальный вопросс для меня. Пытаюсь изменять язык и стиль приложения из всплывающего окна по кнопке "применить". Но пока изменения вступают в силу только после закрытия модального окна.
Код:

void MainWindow::showSettings()
{
QDialog *d = new QDialog(this);
Ui_Dialog *dlg = new Ui_Dialog();
dlg->setupUi(d);

              // connect не работыет
connect(dlg->styleBox,SIGNAL(activated(const QString &)),
            this, SLOT(changeStyle(const QString &)));

d->exec();

              // это сработает после закрытия диалога
QString *str = new QString("CDE");
*str = dlg->styleBox->itemText(dlg->styleBox->currentIndex());
changeStyle(*str);

}


connect не срабатывает, но нет и ошибок.
Записан
Gryz
Гость
« Ответ #2 : Апрель 16, 2007, 15:29 »

http://gryz.narod.ru/Programs/MainWindowSample.rar

добавлено спустя 1 минуту:

 правда у меня все делается в конструкторе, но несложно на другие методы вызов переправить Улыбающийся
Записан
SABROG
Гость
« Ответ #3 : Апрель 16, 2007, 15:29 »

Попробуй update() сделать главной формы из модальной.

Я кажись разобрался как это работает.

Вот мой каркас, вроде все работает.
//header
Код:

#ifndef FRSELECT_H
#define FRSELECT_H

#include <QMainWindow>
#include <QtSql>
#include <QMetaType>
#include <QtGui>
#include "ui_frSelectForm.h"
#include "../include/TForm.h"
class cfrSelectForm : public QDialog, public Ui::frSelectForm // Ui::... - выдераю из исходников сгенерированных после компиляции .ui файла
{
    Q_OBJECT

public:
    cfrSelectForm(QWidget *parent = 0);

protected:
public slots:

protected:

private:
TForm *main; // указатель на класс моего наследника QMainWindow (главного окна)
};
#endif


//source
Код:

#include <QtGui>
#include <QtSql>
#include <QMetaType>
#include "../include/TForm.h"
#include "../include/frSelectForm.h"

cfrSelectForm::cfrSelectForm(QWidget *parent): QDialog(parent, Qt::Sheet)
{
    main = (TForm *)parent;
    setupUi(this);
    main->setWindowTitle("test"); // проверяю, для теста устанавливаю заголовок главной формы
}


//main

Код:

#include <QtGui>
#include <QtSql>
#include <QMetaType>
#include "../include/TForm.h"
#include "../include/frSelectForm.h"
void TForm::addFreight()
{

    cfrSelectForm selectFreight(this); // метод создает нашу модальную форму
    selectFreight.exec();
}
Записан
Gryz
Гость
« Ответ #4 : Апрель 16, 2007, 15:34 »

Цитата: "Gryz"
http://gryz.narod.ru/Programs/MainWindowSample.rar

добавлено спустя 1 минуту:

сорри.  к полям формы пока нельзя доступ получить.
 правда у меня все делается в конструкторе, но несложно на другие методы вызов переправить Улыбающийся
Записан
SABROG
Гость
« Ответ #5 : Апрель 16, 2007, 15:35 »

Цитата: "DenKa"
connect не срабатывает, но нет и ошибок.

Может сигнал не тот ? Я так использую комбобокс со стилем:

Код:

void TForm::on_cbStyles_currentIndexChanged( const QString & text )
{
    qApp->setStyle(text);
    qApp->setPalette( qApp->style()->standardPalette() );
}


Т.е. сигнал currentIndexChanged ловлю

Gryz: спасибо, будем изучать варианты
Записан
Gryz
Гость
« Ответ #6 : Апрель 16, 2007, 15:43 »

выложил подправленную версию. На главном окошке меняем текст QLabel
Записан
DenKa
Гость
« Ответ #7 : Апрель 16, 2007, 19:41 »

Цитата: "SABROG"

 Я так использую комбобокс со стилем:
Код:

void TForm::on_cbStyles_currentIndexChanged( const QString & text )
{
    qApp->setStyle(text);
    qApp->setPalette( qApp->style()->standardPalette() );
}


Т.е. сигнал currentIndexChanged ловлю


Событие on_cbStyles_currentIndexChanged создано констуктором форм (Qt3)?  А как быть в Qt4?
Записан
SABROG
Гость
« Ответ #8 : Апрель 16, 2007, 21:44 »

У меня qt-win-opensource-src-4.3.0-snapshot-20070327, а у тебя 4.4.0 чтоль ?
Через connect, если не нравится готовые события, сигнал currentIndexChanged.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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