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

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

Страниц: 1 2 [3] 4   Вниз
  Печать  
Автор Тема: qobject_cast то работает то нет...  (Прочитано 23791 раз)
Krow
Гость
« Ответ #30 : Октябрь 11, 2009, 21:46 »

давайте... порнуху убрать не сложно.. а что вместо неё класть туда? 0_о
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #31 : Октябрь 11, 2009, 22:21 »

давайте... порнуху убрать не сложно.. а что вместо неё класть туда? 0_о
То, что было написано в этой теме Улыбающийся
Записан
Krow
Гость
« Ответ #32 : Октябрь 12, 2009, 08:31 »

читал что написанор в теме, если честно то ниасилил... либо мне нужно точно так же покурить что и люди мне писавшие здесь.. или всё же пояснить страждущему до знаний поконкретнее было написано..
Записан
BRE
Гость
« Ответ #33 : Октябрь 12, 2009, 09:30 »

читал что написанор в теме, если честно то ниасилил... либо мне нужно точно так же покурить что и люди мне писавшие здесь.. или всё же пояснить страждущему до знаний поконкретнее было написано..
Да ладно, это фундаментальный механизм Qt: Signals & Slots. Разберись с ним.  Подмигивающий

Код
C++ (Qt)
class Child : public QWidget
{
Q_OBJECT
public:
...
signals:
void changedString( const QString &str );
};
 
class mainWindow : ...
{
mainWindow(...)
{
ui.setupUi( this );
 
m_child = new Child( this );
connect( m_child, SIGNAL( changedString( const QString & ) ), ui.actNumberSklad, SLOT( setText( const QString & ) ) );
}
};
 
Когда изменяется строка в child нужно испустить сигнал emit changedString( tr( "Измененная строка" ) ) и все слоты подключенные к этому сигналу получат измененную строку.
Записан
Krow
Гость
« Ответ #34 : Октябрь 12, 2009, 09:39 »

тьфу блин.. совсем забыл что можно самому сигналы создавать...
пасиб что напомнил!
Записан
Krow
Гость
« Ответ #35 : Октябрь 12, 2009, 14:42 »

итак.. продолжаем обучать меня неразумного... сделал так..
child
.h
Код:
signals:
void changedString( const QString &str );
.cpp - вызвал в той процедуре где мне нужен этот сигнал
Код:
emit changedString(dirCount);
mainWindow
.h
Код:
private slots:
void setDirCount(const QString &str );
.cpp
Код:
void mainWindow::setDirCount(const QString &str)
{
dirCount = str;
ui.actNumberSklad->setText(dirCount);
}
место где делаю коннект сигнала
   
Код:
fMyOrg *child = new fMyOrg;
connect (child, SIGNAL(changedString( const QString & )), this, SLOT(setDirCount( const QString & )));
child->dirCount = dirCount;
нифига не пашет... у меня не студия, поэтому консоль ничего не выдаёт по наличию или отсутствию коннекта с сигналом..
как это проверить? и вообще почему может не работать
ЗЫ можно быть дураком даже если умный... но хочется как можно меньше в себе оставить эту часть от дурака..
Записан
pastor
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 2901



Просмотр профиля WWW
« Ответ #36 : Октябрь 12, 2009, 15:01 »

Про Q_OBJECT незабыл?
Записан

Integrated Computer Solutions, Inc. (ICS)
http://www.ics.com/
Krow
Гость
« Ответ #37 : Октябрь 12, 2009, 16:32 »

не забыл..
у меня ведь до этого были сигланы и слоты.. и они коннектятся нормально..
а этот почему то не хочет...
вообще есть проверка на то есть сигнал или нет?? точнее есть соединение сигнал\слот или нет..?
Записан
uriel
Гость
« Ответ #38 : Октябрь 12, 2009, 17:13 »

Если нет консоли, а нужно прочитать сообщение об ошибке, то можно немного извернуться.
Код
C++ (Qt)
void customMessageHandler(QtMsgType, const char *msg){
QMessageBox::critical(0, '', QString::fromAscii(msg));
}
 
int main(int argc, char *argv[])
{
...
qInstallMsgHandler(customMessageHandler);
...
}
Записан
pastor
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 2901



Просмотр профиля WWW
« Ответ #39 : Октябрь 12, 2009, 17:52 »

вообще есть проверка на то есть сигнал или нет?? точнее есть соединение сигнал\слот или нет..?

Цитировать
bool QObject::connect ( const QObject * sender, const char * signal, const QObject * receiver, const char * method, Qt::ConnectionType type = Qt::AutoConnection )   [static]
Creates a connection of the given type from the signal in the sender object to the method in the receiver object. Returns true if the connection succeeds; otherwise returns false.
Записан

Integrated Computer Solutions, Inc. (ICS)
http://www.ics.com/
Krow
Гость
« Ответ #40 : Октябрь 12, 2009, 21:21 »

пасибо, завтра попробую и отпишусь о результате.
Записан
Krow
Гость
« Ответ #41 : Октябрь 13, 2009, 12:19 »

странно, сигнал нормально соединяется... а вот слот не пашет... точнее не вызывается..
Записан
pastor
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 2901



Просмотр профиля WWW
« Ответ #42 : Октябрь 13, 2009, 14:26 »

Выкладывай код, будем смотреть
Записан

Integrated Computer Solutions, Inc. (ICS)
http://www.ics.com/
SASA
Гость
« Ответ #43 : Октябрь 13, 2009, 17:19 »

Зачитался.  Строит глазки
Я не зря писал про коменты. Конечно, код типа parent()->parent()->parent()->.... нужно рефакторить. Но это очень опасное и долгое занятие. Бывают случаи, когда такие костыли работают и трогать их не хочется. Но рядом должен быть комент, который разяснял бы откуда этот костыль взялся и какую дырку он закрывает. Ещё такие костыли я обклабываю кучей ASSERT. И если один из них всплывает я читаю комент и, либо "чиню" костыль, либо рефакторю код.
Я не использую юнит тесты (к моему великому сожелению), поэтому рефакоринг занимает у меня МНОГО времени и сил.
Записан
Krow
Гость
« Ответ #44 : Октябрь 13, 2009, 19:19 »

класс mainWindow
.h
Код:
class fMyOrg;
...
class mainWindow : public QMainWindow
{
Q_OBJECT
public:
mainWindow();
QString dirCount;
...
private:
fMyOrg *createFormMyOrg();
private slots:
void setDirCount(const QString &str );
};
.cpp
Код:
fMyOrg *mainWindow::createFormMyOrg()
{
fMyOrg *child = new fMyOrg;
g_fMyOrg = child;
connect (child, SIGNAL(changedString( const QString & )), this, SLOT(setDirCount( const QString & )));
child->dirCount = dirCount;
workspace->addWindow(child);
return child;
}
void mainWindow::setDirCount(const QString &str)
{
dirCount = str;
ui.actNumberSklad->setText(dirCount);
}
класс fMyOrg
.h
Код:
class fMyOrg : public QWidget
{
Q_OBJECT
public:
QString dirCount;
...
signals:
void changedString( const QString &str );
};
.cpp
Код:
void fMyOrg::pbAddSkladClicked()
{
...
emit changedString(dirCount);
}
fMyOrg это чайлд. именно в функции pbAddSkladClicked() должен вызываться сигнал...
думаю что код понятен.. если что обязательно поясню что и где. весь код не выкладываю он большой, только основные куски кода.
Записан
Страниц: 1 2 [3] 4   Вверх
  Печать  
 
Перейти в:  


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