• 4809阅读
  • 1回复

在问QT4的问题,我快崩溃了!就一个简单的功能:按下按钮,并弹出一个消息框! [复制链接]

上一主题 下一主题
离线hsly110
 
只看楼主 倒序阅读 楼主  发表于: 2006-09-03
我代码如下:
/ test_qtgui.h   用uic-qt4 生成的头文件


#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()));
  QObject::connect(pushButton_MsgBox, SIGNAL(clicked()), Dialog,
              SLOT(testMesssageBox())) ;

  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

};


namespace Ui {
  class Dialog: public Ui_Dialog {};
} // namespace Ui

#endif // TEST_QTGUI_H




// message_box.h   自定义 SLOTS

#include "test_qtgui.h"

class ImageDialog:public QDialog
{
  Q_OBJECT

  public:
    ImageDialog(QWidget *parent = 0);

  private:
    Ui::Dialog ui;
   
  private slots:
    void checkValues();     // 这个SLOTS 无法弹出QMessageBox
 
};


// message_box.cpp
#include "message_box.h"
#include <QMessageBox>

ImageDialog::ImageDialog(QWidget *parent)
  : QDialog(parent)
{
  ui.setupUi(this);

  connect(ui.pushButton_MsgBox, SIGNAL(clicked()), this, SLOT(checkValues()));
 
}

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

}


// main.cpp
#include "test_qtgui.h"
#include <QApplication>

int main(int argc, char *argv[])
{

    QApplication app(argc, argv);
    QDialog *window = new QDialog;
    Ui::Dialog ui;
    ui.setupUi(window);

    window->show();
    return app.exec();

}
[ 此贴被XChinux在2006-09-03 15:27重新编辑 ]
离线XChinux

只看该作者 1楼 发表于: 2006-09-03
一个问题不要重复发帖,照着Qt Programming版置顶帖中的例子做就行。
好好检查代码。这是一眼就能看出的问题。
main函数中你直接使用的是QDialog类和Ui::Dialog,并没有使用你定义的ImageDialog
二笔 openSUSE Vim N9 BB10 XChinux@163.com 网易博客 腾讯微博
承接C++/Qt、Qt UI界面、PHP及预算报销系统开发业务
快速回复
限100 字节
 
上一个 下一个