Qt基础: 信号和槽
2016-04-07 15:34
387 查看
信号和槽用于两个对象之间的通信, 信号和槽机制是Qt 的核心特征, 也是Qt 不同于其他开发框架的最突出的特征.
注意点:
1
3
注意点:
1
使用signals 关键字声明信号; 2signals 前不能使用 public, protected, private 限定符, 因为只有定义该信号的类以及其子类才可以发送该信号;
3
信号只用声明,无需也不能进行定义,没有返回值, 只能使用 void 类型; 4只有QObject 类及其子类才能使用信号和槽机制,故需要在类声明最开始处加 Q_OBJECT 宏.
Demo #ifndef SIGNALS_SLOTS_H #define SIGNALS_SLOTS_H #include <QDialog> namespace Ui { class signals_slots; } class QPushButton; class QSpinBox; class QLabel; //处理信号的对象 class signals_slots : public QDialog { Q_OBJECT public: signals_slots(QWidget *parent = 0); ~signals_slots(); signals: //自定义信号 void dlgReturn(int); private slots: //自定义槽 void showValue(int value); void pushButton_clicked(); private: Ui::signals_slots *ui; QPushButton *pushButton; QSpinBox *spinBox; QLabel *label; }; #endif // SIGNALS_SLOTS_H /////////////////////////////////// #include <QtGui> #include "signals_slots.h" #include "ui_signals_slots.h" signals_slots::signals_slots(QWidget *parent) : QDialog(parent), ui(new Ui::signals_slots) { ui->setupUi(this); QTextCodec::setCodecForTr(QTextCodec::codecForName("utf-8")); pushButton = new QPushButton(this); pushButton->setText(tr("发射信号")); spinBox = new QSpinBox(this); spinBox->setValue(50); label = new QLabel(this); label->setText("value="); QHBoxLayout *layout = new QHBoxLayout(this); layout->addWidget(spinBox); layout->addWidget(pushButton); layout->addWidget(label); setLayout(layout); //连接 按钮 和"按下按钮"槽 connect(pushButton, SIGNAL(clicked()), this, SLOT(pushButton_clicked())); //连接自定义信号和自定义槽 connect(this, SIGNAL(dlgReturn(int)), this, SLOT(showValue(int))); setWindowTitle(tr("自定义信号发送与接收")); } signals_slots::~signals_slots() { delete ui; } void signals_slots::pushButton_clicked() { int value = spinBox->value(); emit dlgReturn(value); //发射信号 } void signals_slots::showValue(int value) { label->setText(tr("value=%1").arg(value)); }
相关文章推荐
- QT学习 第一章:基本对话框
- 使用Shiboken为C++和Qt库创建Python绑定
- Qt 5.6更新至RC版,最终版本近在咫尺
- C#实现子窗体与父窗体通信方法实例总结
- java和c#使用hessian通信的方法
- win32下进程间通信(共享内存)实例分析
- WinForm实现跨进程通信的方法
- C#中使用UDP通信实例
- ASP.NET UserControl 通信的具体实现
- Qt定时器和随机数详解
- 浅析iOS应用开发中线程间的通信与线程安全问题
- Qt实现图片移动实例(图文教程)
- PHP多线程编程之管道通信实例分析
- flex与js通信与彼此之间的互调整理(一)
- Perl的Mail::POP3Client模块和Gmail通信实例
- 使用DNode实现php和nodejs之间通信的简单实例
- 嵌入式iframe子页面与父页面js通信的方法
- Qt for Android开发实例教程
- Android Socket通信详解
- Android 进程间通信实现原理分析