qt4中文教程经典教程内容摘要:
protective),也可是私有的( private),它们可以象任何 c++成员函数一样被调用,可以传递任何类型的参数。 不同在于一个槽函数能和 一个信号相连接,只要信号发出了,这个槽函数就会自动被调用。 connect 函数语法如下: connect(sender, SIGNAL(signal), receiver, SLOT(slot))。 sender 和 receiver 是 QObject 对象指针, signal 和 slot 是不带参数的函数原型。 SIGNALE()和 SLOT()宏的作用是把他们转换成字符串。 在目前有的例子中,我们已经连接了不同的信号和槽。 实际使用中还要考虑如下一些规则: 一个信号可以连接到多个槽: connect(slider, SIGNAL(valueChanged(int)),spinBox, SLOT(setValue(int)))。 connect(slider, SIGNAL(valueChanged(int)),this, SLOT(updateStatusBarIndicator(int)))。 当信号发出后,槽函数都会被调用,但是调用的顺序是 随机的,不确定的。 多个信号可以连接到一个槽 connect(lcd, SIGNAL(overflow()), this, SLOT(handleMathError()))。 connect(calculator, SIGNAL(divisionByZero()),this, SLOT(handleMathError()))。 任何一个信号发出,槽函数都会执行。 一个信号可以和另一个信号相连 connect(lineEdit, SIGNAL(textChanged(const QString amp。 )), this, SIGNAL(updateRecord(const QString amp。 ))); 第一个信号发出后,第二个信号也同时发送。 除此之外,信号与信号连接上和信号和槽连接相同。 连接可以被删除 disconnect(lcd, SIGNAL(overflow()),this, SLOT(handleMathError()))。 这个函数很少使用,一个对象删除后, Qt自动删除这个对象的所有连接。 信号和槽函数必须有着相同的参数类型,这样信号和槽函数才能成功连接: connect(ftp, SIGNAL(rawCommandReply(int, const QString amp。 )),this, SLOT(processReply(int, const QString amp。 )))。 如果信号里的参数个数多于槽函数的参数,多余的参数被忽略: connect(ftp, SIGNAL(rawCommandReply(int, const QString amp。 )),this, SLOT(checkErrorCode(int)))。 如果参速类型不匹配,或者信号和槽不存在,在 debug 状态时, Qt会在 运行期间给出警告。 如果信号和槽连接时包含了参数的名字, Qt将会给出警告。 以前我们列举的例子中都是控件的信号和槽。 但是信号和槽机制在 QObject 中就实现了,可以实现在任何从 QObject 继承的子类中。 class Employee : public QObject { Q_OBJECT public: Employee() { mySalary = 0。 } int salary() const { return mySalary。 } public slots: void setSalary(int newSalary)。 signals: void salaryChanged(int newSalary)。 private: int mySalary。 }。 void Employee::setSalary(int newSalary) { if (newSalary != mySalary) { mySalary = newSalary。 emit salaryChanged(mySalary)。 } } 注意,只有 newSalary != mySalary 时才发出 salaryChanged()信号,这样避免了死循环的出现。 Qt的 MetaObject 系统 Qt的一个最主要的成功是对 C++扩展,即把彼此独立的软件模块连接起来,而不需要模块间的任何细节。 这 个机制就是 MetaObject 系统,它提供了两个关键的用途:信号和槽和 introspection(内省)。 introspection 功能允许应 用程序在运行时得到 QObjec 它子类的 “meta information” ,这对实现信号和槽是很必要的,包括全部信号和槽的列表,和类的名字。 这个 机制还提供了属性(在 Qt Designer 中使用)和文本翻译(国际化)支持。 它们构成了 QSA( Qt Script for Application)的基础。 标准 C++不提供 Qt metaobject 系统需要的动态 metainformation。 Qt提供了一个独立的工具 moc,通过定义 Q_OBJECT 宏实现到 C++函数的转变。 moc是用纯 c++实现的,因此可以使用在任何 C++编译器中。 这个机制工作过程如下: Q_OBJECT 声明了一些 QObject 子类必须实现的内省函数: metaObject(), TR(),qt_metacall()等。 Qt的 moc工具实现 Q_OBJECT 宏声明的函数和所有的信号。 QObject 成员函数 connect()和 disconnect()使用这些内省函数实现信号和槽的连接。 以上这些是通过 qmake, moc和 QObject 自动处理的,程序员通常不用考虑它们。 如果你感到对此好 奇,可以查看 QMetaObject 类文档和 moc 实现的 c++代码。 qws 选项的含义是使这个应用程序成为服务器。 QT Embedded 也是一种 C/S 结构,需要有一个 QT application 做 QWS Server,程序启动时带有 qws参数的就是 QWS Server,不带这个参数就是 QWS Client。 因此任何一个基于 QT的 application 都可以做 QWS Server。 当然 QWS Server 一定先于 QWS Client 启动,否则QWS Client 将启动失败。 在实际应用中,会指定某个特殊 的 application 做 QWS Server,这个 application 一般还会管理一些其它的系统资源。 快速设计对话框( Rapid Dialog Design) 通常程序员们都是用 c++源代码编写 Qt 应用程序, Qt也是很容易用来编写的。 然而,许多程序员更喜欢用可视化的方法设计对话框,这样能更快速更容易对对话框进行修改。 Qt Designer 满足了程序员的这一要求,提供了可视化设计对话框的方法。 它可以给一个应用程序提供全部或者部分对话框。 用 Qt Designer 设计的对话框和用 c++代码写成的对话框是一样的,可以用做一个常用的工具,并不对编辑器产生影响。 在这一节中,我们使用 Qt Designer 创建 GotoCell 对话框,无论用编写代码的方式还是用 Qt Designer,创建对话框都有如下基本的步骤: 创建和初始化子控件。 把子控件放到布局管理器中。 设置 tab 顺序。 创建信号和槽。 实现对话框的自己的 槽函数。 在 windows 平台 Qt 的安装目录的 bin 目录下,点击 ,或者在 unix平台,在命令行上输入 designer。 当 Qt Designer 启动后,它会列出一个控件模板的列表,选择一个模板,进入设计。 ************************** 原文中对 Qt Designer 的介绍略去不想翻译了,只要稍有点界面编程基础的都可以轻松使用。 如果确实需要,以后再补上。 我个人不喜欢使用这个东东,因为要多一个文件要维护,当然如果要频繁修改所设计的对话框,那这种方法还是很方便的。 但 不管怎么样,最终都要修改源代码。 所以我还是比较喜欢用源代码的方式把控件手工写出来。 我想主要介绍把对话框设计好以后,保存为 .ui文件后的处理。 ************************** 假如设计好的文件保存在 gotocell 目录中,命名为 中,然后在同一个目录下创建一个 文件,编码如下: include QApplication include QDialog include int main(int argc, char *argv[]) { QApplication app(argc, argv)。 Ui::GoToCellDialog ui。 QDialog *dialog = new QDialog。 (dialog)。 dialogshow()。 return ()。 } 保 存后,在该目录下运行 qmake,创建 .pro 文件,然后运行 qmake project 生成makefile 文件。 qmake 可 以发现 文件,然后就会调用 uic( Qt 的用户界面编译 器), uic 工具把 转换成 c++代码,保存在 中。 在 中,包含了 Ui::GoToCellDialog 类的定义,这个类和 等价。 这个类声明成员变量存储对话框的子控件和布局管理器,setupUi()函数初始化对话框。 这个类的定义看起来有点象下面这个样子: class Ui::GoToCellDialog { public: QLabel *label。 QLineEdit *lineEdit。 QSpacerItem *spacerItem。 QPushButton *okButton。 QPushButton *cancelButton。 ... void setupUi(QWidget *widget) { ... } }。 这个类没有父类。 使用时创建一个 QDialog,把它传递给 setupUi()函数。 运 行这个程序,对话框将会显示出来,但是有些功能它还不能实现: Ok 按钮是不可用状态的 Cancel 按钮不作任何事情 编辑框除可以输入许可的字符或者数字外,还可以输入任何文本 我 们可以编写代码,让这个对话框变得有用起来。 最直接的方法是创建一个新类,继承QDialog 和 Ui::GoToCellDialog,补上缺少的功 能。 (这说明任何软件问题可以通过添加一层间接包装来简单解决)。 通常命名新类规则是把去掉 uic生成的类名去掉 Ui::前缀。 创建 头文件,写下如下代码: ifndef GOTOCELLDIALOG_H define GOTOCELLDIALOG_H include QDialog include class GoToCellDialog : public QDialog, public Ui::GoToCellDialog { Q_OBJECT public: GoToCellDialog(QWidget *parent = 0)。 private slots: void on_lineEdit_textChanged()。 }。 endif 新建 源文件,实现这个类: include QtGui include GoToCellDialog::GoToCellDialog(QWidget *parent) : QDialog(parent) { setupUi(this)。 QRegExp regExp([AZaz][19][09]{0,2})。 lineEditsetValidator(new QRegExpValidator(regExp, this))。 connect(okButton, SIGNAL(clicked()), this, SLOT(accept()))。 connect(cancelButton, SIGNAL(clicked()), this, SLOT(reject()))。 } void GoToCellDialog::on_lineEdit_textChanged() { okButtonsetEnabled(lineEdithasAcceptableInput())。 } 在构造函数中,我们调用 setupUi()初始化这个对话框。 由于多继承,我们可以直接使Ui::GoToCellDialog 的成员。 创建了用户界面以后,我们可以把子控件的信号和槽函数。qt4中文教程经典教程
相关推荐
Tr1一旦进入导通状态,变压器 P1绕组已经加上了 Vin,因此 P2绕组为按照各个的圈数比所形成的电压为: Eb=( Nb/Np) Vin 这个电压更因在 Tr1导通时,极性相同,因此 Tr1在导通状态时能继续维持,此时基极电流 Ib为: Ib=[( Nb/Np) *Vin — ( Vf+Vbe) ] / Rb 像定电流般的继续流动。 其实, Tr1 的集电极电流 Ic=Vin*T/Lp,
应的处理:解列、切机、切负荷或启动其它使系统再同期的控制措施;也可在电力系统发生频率或电压稳定事故时,将联络线解列,隔离事故系统。 过频切机设置 3轮。 主要特点 可对两回线路进行失步判别。 装置采用整体面板、全封闭机箱,装置采用双 CPU 结构,强弱电严格分离,舍弃传统的背板配线方式;同时在软件设计上采取了有效的抗干扰措施。 因此装置具有很强的抗干扰和抗电磁辐射的能力。
UA139。 2 AC 202 UA1 201 3 LPF 4 CPU 5 COM 打印 6 OPT1 602 对时 601 204 203 信号复 归 604 投检修 态 603 UB139。 206 UB1 205 低压投入 606 低频投入 605 直流电源 101 208 207 4851 A 501 串 过负荷接 点开入 2 608 过负荷接 点开入 1 607 + 直流电源 -
由生产车间填写《紧急 (例外 )放行申请单入经品质负责人批准后,一联留存,一联交品质部,一联交仓库。 a) 仓库保管员根据批准的《进货验证记录》按规定数量留取同批样品送检,其余由检验员在领料单上注明“紧急放行”后放行;车间在其后生产记录上 Q/APQP072020 关键元器件和材料的定期确认检验程序 第 A 版 第 0 次修订 第 2 页 共 2 页 也应注明“紧急放行”。 b) 在放行的同时
验证,并在“不合格品处理报告”之“处理 ”栏内注明处理意见,外理意见包括: 37 程序文件 文件编号: QP0701 标题: 版 号: A/0 不合格品控制程序 页 码: 2/3。 (指退供应商)印章。 生产车间根据技质部对不合格品的处理意见,将不合格品退回仓库。 当不合格较严重时,技质部必须对同一批、类的库存品重新进行检查。 不合格品的处理 仓库对不合格品进行隔离保管,并及时通知相关部门处置
有关资料,经分析、整理后,填写“供应商评定报告”,经总经理批准后,该供应商纳入合格供应商名单。 评定时机:供应商纳入合格名单后,如果考核等级在“ A”的,可以免以每年一次的供应商评定范围内,否则需重新评定。 质量跟踪 为确保供应商能长期、稳定地提供所需物料,由供销部定期地组织对已正式供货的供应商进行质量跟踪。 供销部建立供应商档案,定期对供应商供货状况进行评审。 对供货质量下降的供应商