crossplatform.ru

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


  Ответ в Управление главным окном из дочернего
Введите ваше имя
Подтвердите код

Введите в поле код из 6 символов, отображенных в виде изображения. Если вы не можете прочитать код с изображения, нажмите на изображение для генерации нового кода.
 

Опции сообщения
 Включить смайлы?
Иконки сообщения
(Опционально)
                                
                                
  [ Без иконки ]
 


Последние 10 сообщений [ в обратном порядке ]
Максим Дата 3.9.2011, 17:07
 
class Preference : public QDialog, private Ui::Preference// private заменить на protected
...
Алексей1153 Дата 2.9.2011, 19:22
 
Цитата
Но про то, что можно сигнал с сигналом соединять, где-то читал


так в справке это написано :) Там и читал. Процитировать не могу, нет под рукой
RazrFalcon Дата 2.9.2011, 10:43
  У меня, пока, вложенности нет, но решение интересное. Про сигнал-сигнал не слышал.
silver47 Дата 2.9.2011, 9:52
  Это хорошее решение. У меня сейчас проект, в котором нужно некритичную ошибку при работе, записать в лог и продолжить работу. Записью в лог занимается главное окно. А у дочерних окон, есть поддочерние и так далее.. глубина вложенности по классам по 4-5. Там с помощью публичных функций не так просто это сделать, нужно будет постоянно таскать за собой указатель на главное окно. Вот тут и выручают сигналы-слоты.

class MainClass(...){
private:
public:
private slots:
  void catchError(QString);
}

class SubClass(...){
private:
public:
signals:
  void throwError(QString);
}

class SubSubClass(...){
private:
public:
signals:
  void throwError(QString);
}

// тогда работа будет выглядеть так:
// subClass.cpp
SubSubClass sc(this);
QObject::connect(&sc, SIGNAL(throwError(QString)), this, SIGNAL(throwError(QString))); // соединяем не сигнал со слотом, а сигнал с сигналом.
// в результате можно отловить любое событие главным окном от дочернего любого уровня вложенности без таскания указателя главного окна и без создания промежуточных слотов


Наверняка есть более эстетичные способы это сделать, я не профессионал. Но про то, что можно сигнал с сигналом соединять, где-то читал :)
RazrFalcon Дата 2.9.2011, 8:47
 
Цитата(silver47 @ 2.9.2011, 5:28) *
Не понял вопроса. Я всегда пишу гуи сам, без дизайнера.

А я - нет. В этом и трабл.

Вроде разобрался. Правда не через сигналы и слоты, а через публичные функции.

Пример:
silver47 Дата 2.9.2011, 5:28
 
Цитата(RazrFalcon @ 2.9.2011, 0:31) *
А почему тогда если я сам пишу гуи, без дизайнера и ui, то я могу управлять главным окном из дочернего?


Не понял вопроса. Я всегда пишу гуи сам, без дизайнера.
class MyMainClass(...){
  QOBJECT
public:
  MyMainClass(...);
}

class MyChildClass(...){
  QOBJECT
  QTableWidget table;
public:
  MyChildClass(....)
}

//создание экземпляра MyChildClass где-то в недрах MyMainClass
MyChildClass myClass(this);
//попытка обратиться к приватному члену класса MyChildClass
myClass->table->hide(); // неудачно. 'QTableWidget MyChildClass::table' is private


решение:
переносить нужные Вам объекты в секцию public или воспользоваться сигналами слотами.
RazrFalcon Дата 1.9.2011, 21:31
  А почему тогда если я сам пишу гуи, без дизайнера и ui, то я могу управлять главным окном из дочернего?
silver47 Дата 25.8.2011, 5:35
  Эм... мне в таких случаях помогает система сигналов-слотов. Главное окно создает дочернее и тут же прикручивает сигнал от дочернего к своему слоту. А по поводу
mainWindow->table->hide(); // нужно чтобы table был объявлен в секции public, что не есть хорошо.
RazrFalcon Дата 24.8.2011, 22:06
  1) mainwindow.ui + ui_mainwindiw.h
2) ХЗ <_<
Алексей1153 Дата 24.8.2011, 17:50
  первый вопрос: как и где определено table
второй вопрос: зачем после #include "mainwindow.h" идет форвард class MainWindow;
Просмотр темы полностью (откроется в новом окне)
RSS Текстовая версия Сейчас: 28.3.2024, 15:08