用Qt Creator创建一个简单的名为Test的Dialog GUI Application,最后一步产生的几个文件是:main.cpp,dialog.cpp,dialog.h,dialog.ui,Test.pro。然后打开对话框的ui文件,将对话框的objectName改为"DialogClass",再添加一个按钮testButton,然后在Change signal/slots的时候,给DialogClass添加一个slots,名为slotTest()。接着将testButton的clicked()信号连接到这个槽函数上。然后实现这个槽函数。几个文件的主要内容如下:
1.ui_dialog.h文件
QT_BEGIN_NAMESPACE
class Ui_DialogClass
{
public:
QPushButton *testButton;
void setupUi(QDialog *DialogClass)
{
...
QObject::connect(testButton, SIGNAL(clicked()), DialogClass, SLOT(slotTest()));
...
}
void retranslateUi(QDialog *DialogClass)
{
...
}
};
namespace Ui {
class DialogClass: public Ui_DialogClass {};
} // namespace Ui
QT_END_NAMESPACE
2.dialog.h文件
namespace Ui
{
class DialogClass;
}
class Dialog : public QDialog
{
Q_OBJECT
public:
Dialog(QWidget *parent = 0);
~Dialog();
private:
Ui::DialogClass *ui;
private slots:
void slotTest();
};
3.dialog.cpp文件
Dialog::Dialog(QWidget *parent)
: QDialog(parent), ui(new Ui::DialogClass)
{
ui->setupUi(this);
}
Dialog::~Dialog()
{
delete ui;
}
void Dialog::slotTest()
{
QMessageBox::information(this,"warning!","OK! Test!");
}
让我感到疑问的几个问题是:
1.在ui_dialog.h中的这两句代码:
namespace Ui {
class DialogClass: public Ui_DialogClass {};
}
有什么作用?这两句是自动产生的,删除后,只要重新编译,这两句代码又自动产生了。除非我手工创建对话框的代码而不是通过修改ui文件来产生。
2.DialogClass这个类跟dialog.h文件中定义的类Dialog有什么关系没有?
3.从ui_dialog.h文件中的这句代码:
QObject::connect(testButton, SIGNAL(clicked()), DialogClass, SLOT(slotTest()));
来看,槽函数slotTest()好像本应是定义在DialogClass类里的,但在实际的代码中,这个函数的定义是属于Dialog类的一个成员函数,如dialog.h文件内容所示,而且,这个函数是正确调用了的,我不知道是因为误打误撞写对了还是应该如此?Dialog是如何接收到本应属于DialogClass的信号clicked()?
谢谢回答!另外,我用的版本是Qt SDK 2009.01