• 7773阅读
  • 7回复

快崩溃了,自定义的SLOT老是无法生效,代码如下: [复制链接]

上一主题 下一主题
离线hsly110
 
只看楼主 倒序阅读 楼主  发表于: 2006-09-03
#ifndef TEST_QTGUI_H
#define TEST_QTGUI_H

#include <QtCore/QVariant>
#include <QtGui/QAction>
#include <QtGui/QApplication>
#include <QtGui/QButtonGroup>
#include <QtGui/QDialog>
#include <QtGui/QHBoxLayout>
#include <QtGui/QPushButton>
#include <QtGui/QSpacerItem>
#include <QtGui/QWidget>

class Ui_Dialog // 基类
{
 
public:
  QWidget *layoutWidget;
  QHBoxLayout *hboxLayout;
  QSpacerItem *spacerItem;
  QPushButton *okButton;
  QPushButton *cancelButton;
  QPushButton *pushButton_MsgBox;

  void setupUi(QDialog *Dialog)
  {
  Dialog->setObjectName(QString::fromUtf8("Dialog"));
  Dialog->resize(QSize(400, 300).expandedTo(Dialog->minimumSizeHint()));
  layoutWidget = new QWidget(Dialog);
  layoutWidget->setObjectName(QString::fromUtf8("layoutWidget"));
  layoutWidget->setGeometry(QRect(20, 250, 351, 33));
  hboxLayout = new QHBoxLayout(layoutWidget);
  hboxLayout->setSpacing(6);
  hboxLayout->setMargin(0);
  hboxLayout->setObjectName(QString::fromUtf8("hboxLayout"));
  spacerItem = new QSpacerItem(131, 31, QSizePolicy::Expanding, QSizePolicy::Minimum);

  hboxLayout->addItem(spacerItem);

  okButton = new QPushButton(layoutWidget);
  okButton->setObjectName(QString::fromUtf8("okButton"));

  hboxLayout->addWidget(okButton);

  cancelButton = new QPushButton(layoutWidget);
  cancelButton->setObjectName(QString::fromUtf8("cancelButton"));

  hboxLayout->addWidget(cancelButton);

  pushButton_MsgBox = new QPushButton(Dialog);
  pushButton_MsgBox->setObjectName(QString::fromUtf8("pushButton_MsgBox"));
  pushButton_MsgBox->setGeometry(QRect(10, 20, 87, 29));
  retranslateUi(Dialog);
  QObject::connect(okButton, SIGNAL(clicked()), Dialog, SLOT(accept()));
  QObject::connect(cancelButton, SIGNAL(clicked()), Dialog, SLOT(reject()));

  QMetaObject::connectSlotsByName(Dialog);
  } // setupUi

  void retranslateUi(QDialog *Dialog)
  {
  Dialog->setWindowTitle(QApplication::translate("Dialog", "QT\347\225\214\351\235\242\346\265\213\350\257\225", 0, QApplication::UnicodeUTF8));
  okButton->setText(QApplication::translate("Dialog", "OK", 0, QApplication::UnicodeUTF8));
  cancelButton->setText(QApplication::translate("Dialog", "Cancel", 0, QApplication::UnicodeUTF8));
  pushButton_MsgBox->setText(QApplication::translate("Dialog", "MesssageBox", 0, QApplication::UnicodeUTF8));
  Q_UNUSED(Dialog);
  } // retranslateUi

};


class ImageDialog:public QDialog   //派生类 ImageDialog
{
  public:
    ImageDialog(QWidget *parent = 0);

  private:
    Ui_Dialog ui;
   
  private slots:
    void aaa() ;   // 自定义slots
};


ImageDialog::ImageDialog(QWidget *parent)
  : QDialog(parent)
{
  ui.setupUi(this);
  QObject::connect(ui.pushButton_MsgBox, SIGNAL(clicked()), this,
              SLOT(aaa()));   // 这里的 aaa()老是无法激活
}

void ImageDialog::aaa()
{
  (void) QMessageBox::information(this, tr("No Image Name"),
          tr("Please supply a name for the image."), QMessageBox::Cancel);

}

#endif // TEST_QTGUI_H





int main(int argc, char *argv[])
{
  QApplication app(argc, argv) ;
  ImageDialog ui ;
  return ui.exec() ;



运行之后提示:

Object::connect: No such slot QDialog::aaa()
Object::connect: (sender name:   'pushButton_MsgBox')
Object::connect: (receiver name: 'Dialog')
[ 此贴被XChinux在2006-09-03 09:53重新编辑 ]
离线XChinux

只看该作者 1楼 发表于: 2006-09-03
是否是在一个文件的中?把ui, .h, .cpp和main.cpp都分类写。
main函数中return 的应是app.exec()
二笔 openSUSE Vim N9 BB10 XChinux@163.com 网易博客 腾讯微博
承接C++/Qt、Qt UI界面、PHP及预算报销系统开发业务
离线fengshenx

只看该作者 2楼 发表于: 2006-09-06
缺Q_OBJECT宏
离线narnialei
只看该作者 3楼 发表于: 2006-09-08
同意楼上的
离线wangowen

只看该作者 4楼 发表于: 2006-09-08
aaa()肯定是你自己定义的slot,那么必须要有Q_OBJECT宏
离线wylhistory
只看该作者 5楼 发表于: 2006-09-11
楼上三位正解.
离线zhang_j_j
只看该作者 6楼 发表于: 2009-06-19
我也是这个问题,而且我加了Q_OBJECT,请问还有什么地方会出现这个问题啊
离线tianykun
只看该作者 7楼 发表于: 2009-06-20
写的,真够乱
快速回复
限100 字节
 
上一个 下一个