QMessageBox segFaulting в слоте Mainwindows onlclick

В моем мобильном приложении qt у меня есть список. Я подключил список, щелкнул по слоту главного окна.

connect(view,SIGNAL(clicked(QModelIndex)),this,SLOT(showMessage()));

void MainWindow::showMessage()
{
    QMessageBox::information(this,"info","info",QMessageBox::Ok,0);
}

Теперь, если я поставлю 'QMessageBox::information(this,"info","info",QMessageBox::Ok,0);' в конструкторе работает.

иначе это дает ошибку сегментации.

0 qwidgetPrivate :: setparent_sys qwidget_simulator.cpp 207 0x0083195e
1 qwidget :: setParent qwidget.cpp 9985 0x00820784
2 qwidget :: setParent qwidget.cpp 9942 0x00820508
3 qfocusframeprivate :: Обновление qfocusframe.cpp 72 0x00c337d1 br> 4 QFocusFrame::setWidget qfocusframe.cpp 231 0x00c340aa
5 QS60Style::event qs60style.cpp 3277 0x00b569e2
6 QApplicationPrivate::notify_helper qapplication.cpp 4415 0x007d84b6
0x007d5f0f
8 QCOReApplication :: NotifyInternal QCOReApplication.cpp 732 0x6A1FE5BC
9 QCOReApplation :: SendEvent QCOReApplication.h 215 0x00e3Ac02
10 qapplycationPrivate :: SetFocusWidge qupplication.cpp 2210 0x007d316c
11 qwidget :: setfocus qwidget. cpp 6288 0x00819c21
12 QApplication::setActiveWindow qapplication.cpp 2590 0x007d3df8
13 QWidget::activateWindow qwidget_simulator.cpp 601 0 X00832C02
14 qwidgetPreivate :: Show_sys qwidget_simulator.cpp 242 0x00831AF4
15 qwidgetPrivate :: Show_Helper Qwidget.cpp 7380 0x0081C41D
16 qwidget :: setVisible Qwidget.cpp 7594 0x0081cbbe
17 qdialog :: beavisible Qdialog. cpp 739 0x00c60f78
18 QWidget::show qwidget_simulator.cpp 889 0x00833a26
19 QDialog::exec qdialog.cpp 543 0x00c6060f
20 QMessageBoxPrivate::showOldMessageBox qmessagebox.cpp0 ...

это обратная связь. что здесь не так?


person Aniket Awati    schedule 23.03.2011    source источник


Ответы (2)


Слот должен иметь ту же сигнатуру, что и сигнал. Вы не можете подключить сигнал, принимающий параметр, к слоту, который его не ожидает. Добавьте этот параметр QModelIndex к showMessage():

connect(view,SIGNAL(clicked(QModelIndex)),this,SLOT(showMessage(QModelIndex)));

void MainWindow::showMessage(QModelIndex)
{
    QMessageBox::information(this,"info","info",QMessageBox::Ok,0);
}
person Stephen Chu    schedule 23.03.2011

Ваш сигнал не имеет той же подписи, что и ваш слот: clicked(QModelIndex)) = Singal. showMessage() = Слот.

Превратите свой слот в: showMessage(QModelIndex)

person snoofkin    schedule 23.03.2011
comment
не думаю так. Позже я изменил свой вид с MainWindow на форму, расширяющую только Qwidget. Сейчас все работает без изменений. Слот должен иметь ‹= количество параметров, чем сигнал. Так что я не думаю, что это было проблемой. Я думаю, что добавил более одного ребенка в центральный виджет. Вот почему окно сообщений сбоит в setparent. - person Aniket Awati; 24.03.2011