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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Просмотр сигналов и слотов  (Прочитано 4340 раз)
kibsoft
Хакер
*****
Offline Offline

Сообщений: 625


Просмотр профиля WWW
« : Январь 07, 2010, 00:14 »

Есть примерно такой код:
MainWindow::MainWindow(QWidget *parent):QMainWindow(parent)
{
  usersList=new QListWidget(this);
 mesWindow=new MessageWindow(this);//это объект и у него есть слот setNewMessageWindow
  connect(this>usersList,SIGNAL(itemDoubleClicked(QListWidgetItem*)),mesWindow,SLOT(setNewMessageWindow(QListWidgetItem*));
}

int main(int argc,char* argv[])
{
 MainWindow w1;
  w1.show();
  return app.exec();
}

Но при двойном клике на листвиджете ничего не происходит, т.е. сигнал и слот не соединились..как вообще можно проверить прошел ли connect?
Записан

http://kibsoft.ru - Download the Qt Media Encoding Library here

The apps that were written using QtMEL:
http://srecorder.com - Screen recording software
BRE
Гость
« Ответ #1 : Январь 07, 2010, 00:22 »

Но при двойном клике на листвиджете ничего не происходит, т.е. сигнал и слот не соединились..как вообще можно проверить прошел ли connect?
connect возвращает bool значение о результате и выводит на консоль диагностические сообщения.
Записан
kibsoft
Хакер
*****
Offline Offline

Сообщений: 625


Просмотр профиля WWW
« Ответ #2 : Январь 07, 2010, 00:29 »

connect возвратил true...но при клике ничего не происходит..
Если объект класса MessageWindow создавать в main, то все работает...
int main(int argc,char* argv[])
{
    QApplication app(argc,argv);
    MainWindow w1;

    w1.show();
   MessageWindow w2;
   QObject::connect(w1.usersList,SIGNAL(itemDoubleClicked(QListWidgetItem*)),
                    &w2,SLOT(setNewMessageWindow(QListWidgetItem*)));
    return app.exec();
}
А что неправильно в предыдущем примере?
Записан

http://kibsoft.ru - Download the Qt Media Encoding Library here

The apps that were written using QtMEL:
http://srecorder.com - Screen recording software
kibsoft
Хакер
*****
Offline Offline

Сообщений: 625


Просмотр профиля WWW
« Ответ #3 : Январь 07, 2010, 00:51 »

Если в первом посте изменить(просто для примера):
Код:
connect(usersList,SIGNAL(currentRowChanged(int)),
            this,SLOT(showMaximized()));
то все работает, но если:
Код:
connect(usersList,SIGNAL(itemDoubleClicked(QListWidgetItem*)),
            this,SLOT(showMaximized()));
то опять на клики не реагирует...
Записан

http://kibsoft.ru - Download the Qt Media Encoding Library here

The apps that were written using QtMEL:
http://srecorder.com - Screen recording software
lit-uriy
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3880


Просмотр профиля WWW
« Ответ #4 : Январь 07, 2010, 03:23 »

а ты в свой слот отладочную строку помести, например:
qDebug() << "Jump to slot";

и посмотри в консоли, попадает в слот или нет. Тем самым область поиска проблемы сузишь
Записан

Юра.
ilot
Гость
« Ответ #5 : Январь 07, 2010, 06:45 »

А занесены ли в usersList какие-нибудь элементы? Изначально он создается пустым, в приведенных примерах не видно, чтобы в него что-то добавлялось. Если вы делаете двойной щелчок по пустому списку, то сигнал itemDoubleClicked просто не будет генерироваться.
Записан
kibsoft
Хакер
*****
Offline Offline

Сообщений: 625


Просмотр профиля WWW
« Ответ #6 : Январь 07, 2010, 12:46 »

usersList заполнен..в слот не заходит..listwidget вообще не реагирует на клики и даже не выделяет элемент списка.. хотя при создании объектов в main() все отлично работает(3 пост)...
Записан

http://kibsoft.ru - Download the Qt Media Encoding Library here

The apps that were written using QtMEL:
http://srecorder.com - Screen recording software
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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