点击时,QMessageBox会在主Windows插槽中显示segFaulting

时间:2011-03-23 07:01:19

标签: qt qt4 nokia

在我的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 :: activateWindow 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 个答案:

答案 0 :(得分:3)

插槽必须与信号具有相同的签名。您无法将带有参数的信号连接到期望无效的插槽。将QModelIndex参数添加到showMessage()

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

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

答案 1 :(得分:1)

您的信号与插槽的签名不同: clicked(QModelIndex))= Singal。 showMessage()= Slot。

将您的广告位变为:showMessage(QModelIndex)