• 6429阅读
  • 3回复

信号和槽 学习笔记 [复制链接]

上一主题 下一主题
离线wvins
 
只看楼主 倒序阅读 楼主  发表于: 2008-09-25
— 本帖被 XChinux 执行加亮操作(2008-09-25) —
源代码 9.QtCheckBox.rar (485 K) 下载次数:36 源代码 9.QtCheckBox.rar (485 K) 下载次数:36 在Qt群里面有个人问QCheckBox怎么判断是否选择,我翻了下文档告诉他,可是他说他的4.3.2版本没有isChecked()方法,主版本都是4应该不会有这么大的变化,我就想到写个Demo给他.

我自己就是个初学者,甚至没有实际的使用过Connect,所以在编写过程中遇到了很多问题,我想都是个初学者会碰到的,记录在这里给初学者参考.

首先是用QtDesigner制作了一个简单的Dialog,拖拉一下控件就可以了,见附件.
自动生成的头文件是ui_UiQtCheckBox.h

然后,由Ui_Dialog派生出一个新类,这里要用到C++的多继承特性.代码如下:
#ifndef H_MYDIALOG_H
#define H_MYDIALOG_H
#include <QDialog>
#include <QMessageBox>
#include "ui_UIQtCheckBox.h"

class MyController: public QDialog, public Ui_Dialog
//多继承,这里关系到Connect函数能不能正确执行
//因为自动生成的Ui_Dialog类不是从QObject继承的,

//所以不能Connect,在这里我郁闷了很久!
{
Q_OBJECT //这玩意只要出现了QT专用的东东slot,signal就要用到
public:
MyController():QDialog()
{
setupUi(this);
connect(pushButton, SIGNAL(clicked()),
this, SLOT(myClick()));
}
private slots:
void myClick()
{
if(checkBox->isChecked())
QMessageBox::critical(NULL, "","Checked");
else
QMessageBox::critical(NULL, "","NotChecked");
}
};
#endif
主程序代码如下:
#include <QApplication>
#include "MyDialog.h"

int main(int argc, char *argv[])
{
QApplication app(argc, argv);
MyController mycon;
mycon.show();
return app.exec();
}
----------------------------
希望对广大初学者有帮助,一起进步!
[ 此贴被wvins在2008-10-31 23:56重新编辑 ]
离线lazybone
只看该作者 1楼 发表于: 2008-09-26
标题啥意思?
离线wvins
只看该作者 2楼 发表于: 2008-09-26
没啥意思,自己学的记录,
主要设计到connect的一些细节.

一开始我在ui_Dialog里面直接connect,郁闷了好久,我想也有人会和我犯同样的错误吧
离线wvins
只看该作者 3楼 发表于: 2008-11-01
今天 尝试做一个简单的Sqlite存取Icon的Demo,
由于之前囫囵吞枣,并没有理解透Signal和Slot,甚至没有分清楚,今天记录下些心得体会,于大家 共同进步。

《C++ GUI Programming with Qt 4》中
Slots are almost identical to ordinary C++ member functions.
也就是说
Slots可以理解成传统意义上的类成员函数。
而Signal就是信号了,比如数据变化的时候emit一个Signal出去。
----------
在一个Qt类中的结构如下:
class MyQtClass
{
    Q_OBJECT;//必须使用moc转换成标准C++能够识别的代码,以支持slots和Signal
public slots:
    void save(){};
signals:
    void somethingChanged();//信号就是函数的原型
};
快速回复
限100 字节
 
上一个 下一个