QMessageBox segFaulting в слоте Mainwindows onlclick - PullRequest
0 голосов
/ 23 марта 2011

В моем мобильном приложении 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 :: update qfocusframe.cpp 72 0x00c337d1
4 QFocusFrame :: setWidget qfocusframe.cpp 231 0x00c340aa
5 QS60Style :: event qs60style.cpp 3277 0x00b569e2
6 QApplicationPrivate :: notify_helper qapplication.cpp 4415 0x007d84b6
7 QApplication :: notify qapplication.cpp 3817 0x007d5f0f
8 QCoreApplication :: notifyInternal qcoreapplication.cpp 732 0x6a1fe5bc
9 QCoreApplication :: sendEvent qcoreapplication.h 215 0x00e3ac02
10 QApplicationPrivate :: setFocusWidget qapplication.cpp 2210 0x007d316c
11 QWidget :: setFocus qwidget.cpp 6288 0x00819c21
12 QApplication :: setActiveWindow qapplication.cpp 2590 0x007d3df8
13 QWidget :: activWindow qwidget_simulator.cpp 601 0x00832c02
14 QWidgetPrivate :: show_sys qwidget_simulator.cpp 242 0x00831af4
15 QWidgetPrivate :: show_helper qwidget.cpp 7380 0x0081c41d
16 QWidget :: setVisible qwidget.cpp 7594 0x0081cbbe
17 QDialog :: setVisible qdialog.cpp 739 0x00c60f78
18 QWidget :: show qwidget_simulator.cpp 889 0x00833a26
19 QDialog :: exec qdialog.cpp 543 0x00c6060f
20 QMessageBoxPrivate :: showOldMessageBox qmessagebox.cpp 1906 0x00c7fdab
...

это обратный след. что здесь не так?

Ответы [ 2 ]

3 голосов
/ 23 марта 2011

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

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

void MainWindow::showMessage(QModelIndex)
{
    QMessageBox::information(this,"info","info",QMessageBox::Ok,0);
}
1 голос
/ 23 марта 2011

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

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

...