Qt4.4.3自带教程-一个变化牵扯其他的变化

简介:
为我们自定义的类添加信号和槽:
 
lcdrange.h头文件:
 
InBlock.gif#ifndef __LCDRANGE_H__ 
InBlock.gif#define __LCDRANGE_H__ 
InBlock.gif 
InBlock.gif#include <QWidget> 
InBlock.gif 
InBlock.gif class QSlider; //new:提前声明一下 
InBlock.gif 
InBlock.gif class LCDRange :  public QWidget 
InBlock.gif
InBlock.gif  Q_OBJECT 
InBlock.gif public
InBlock.gif        LCDRange(QWidget *parent = 0); 
InBlock.gif         int value()  const; //new : 添加一个函数 
InBlock.gif public slots: 
InBlock.gif   void setValue( int value); 
InBlock.gifsignals: 
InBlock.gif   void valueChanged( int newValue);     
InBlock.gif private
InBlock.gif  QSlider * slider; //new:改成成员变量 
InBlock.gif}; 
InBlock.gif 
InBlock.gif#endif  // __LCDRANGE_H__
 
lcdrange.cpp类实现文件:
 
InBlock.gif#include <QLCDNumber> 
InBlock.gif#include <QSlider> 
InBlock.gif#include <QVBoxLayout> 
InBlock.gif 
InBlock.gif 
InBlock.gif#include  "lcdrange.h" 
InBlock.gif 
InBlock.gifLCDRange::LCDRange(QWidget *parent) 
InBlock.gif        : QWidget(parent) 
InBlock.gif
InBlock.gif   //LCD数字 
InBlock.gif        QLCDNumber *lcd =  new QLCDNumber(2); 
InBlock.gif        lcd->setSegmentStyle(QLCDNumber::Flat); 
InBlock.gif 
InBlock.gif   //Slider 
InBlock.gif        slider =  new QSlider(Qt::Horizontal); 
InBlock.gif        slider->setRange(0, 99); 
InBlock.gif        slider->setValue(0); 
InBlock.gif        connect(slider, SIGNAL(valueChanged( int)),lcd, SLOT(display( int))); 
InBlock.gif         
InBlock.gif         //new: 新加 
InBlock.gif        connect(slider,SIGNAL(valueChanged( int)), this,SIGNAL(valueChanged( int))); 
InBlock.gif 
InBlock.gif   //布局 
InBlock.gif        QVBoxLayout *layout =  new QVBoxLayout; 
InBlock.gif        layout->addWidget(lcd); 
InBlock.gif        layout->addWidget(slider); 
InBlock.gif        setLayout(layout); 
InBlock.gif
InBlock.gif 
InBlock.gif int LCDRange::value()  const 
InBlock.gif
InBlock.gif   return slider->value(); 
InBlock.gif
InBlock.gif 
InBlock.gif void LCDRange::setValue( int value) 
InBlock.gif
InBlock.gif  slider->setValue(value); 
InBlock.gif}
 
mywidget.h头文件:
 
InBlock.gif#ifndef __MYWIDGET_H__ 
InBlock.gif#define __MYWIDGET_H__ 
InBlock.gif#include <QWidget> 
InBlock.gif 
InBlock.gif class MyWidget :  public QWidget 
InBlock.gif
InBlock.gif public
InBlock.gif        MyWidget(QWidget *parent = 0); 
InBlock.gif}; 
InBlock.gif 
InBlock.gif#endif  // __MYWIDGET_H__
 
mywidget.cpp文件:
 
InBlock.gif#include <QApplication> 
InBlock.gif#include <QPushButton> 
InBlock.gif#include <QFont> 
InBlock.gif#include <QGridLayout> 
InBlock.gif 
InBlock.gif#include  "lcdrange.h" 
InBlock.gif#include  "mywidget.h" 
InBlock.gif 
InBlock.gif //MyWidget类实现部分 
InBlock.gifMyWidget::MyWidget(QWidget *parent) 
InBlock.gif        : QWidget(parent) 
InBlock.gif
InBlock.gif   //创建quit按钮 
InBlock.gif        QPushButton *quit =  new QPushButton(tr( "Quit")); 
InBlock.gif        quit->setFont(QFont( "Times", 18, QFont::Bold)); 
InBlock.gif        connect(quit, SIGNAL(clicked()), qApp, SLOT(quit())); 
InBlock.gif         
InBlock.gif        LCDRange* prevRange=0; 
InBlock.gif 
InBlock.gif   //网格布局 
InBlock.gif        QGridLayout *grid =  new QGridLayout; 
InBlock.gif         for ( int row = 0; row < 3; ++row) { 
InBlock.gif                 for ( int column = 0; column < 3; ++column) { 
InBlock.gif                        LCDRange *lcdRange =  new LCDRange; //创建LCD+Slider 
InBlock.gif                        grid->addWidget(lcdRange, row, column); 
InBlock.gif                                         
InBlock.gif                         //new : 新增 
InBlock.gif                         if(prevRange) 
InBlock.gif                        { 
InBlock.gif                           //如果存在前一个 
InBlock.gif                          connect(lcdRange,SIGNAL(valueChanged( int)),prevRange,SLOT(setValue( int))); 
InBlock.gif                        } 
InBlock.gif                        prevRange=lcdRange;                         
InBlock.gif                } 
InBlock.gif        } 
InBlock.gif 
InBlock.gif        QVBoxLayout *layout =  new QVBoxLayout; 
InBlock.gif        layout->addWidget(quit); 
InBlock.gif        layout->addLayout(grid); //子布局 
InBlock.gif         
InBlock.gif        setLayout(layout); //设置布局 
InBlock.gif
 
main.cpp主程序文件:
 
InBlock.gif //主程序文件 
InBlock.gif#include <QApplication> 
InBlock.gif#include  "mywidget.h" 
InBlock.gif 
InBlock.gif int main( int argc,  char *argv[]) 
InBlock.gif
InBlock.gif        QApplication app(argc, argv); 
InBlock.gif         
InBlock.gif         //创建MyWidget的一个实例 
InBlock.gif        MyWidget widget; 
InBlock.gif        widget.show(); 
InBlock.gif         
InBlock.gif         return app.exec(); 
InBlock.gif}
 
截图:
 
我们发现拖到一个滑块,前面的所有滑块设置成同样的值。



本文转自 xcf007 51CTO博客,原文链接:http://blog.51cto.com/xcf007/104096 ,如需转载请自行联系原作者



相关文章
|
4月前
|
存储 缓存 自然语言处理
QT基础教程(QMap和QHash)
QT基础教程(QMap和QHash)
181 0
|
27天前
|
数据可视化 算法 C++
C++ cmake工程引入qt6和Quick 教程
C++ cmake工程引入qt6和Quick 教程
32 0
|
4月前
|
数据可视化 计算机视觉
QT基础教程(图形处理)
QT基础教程(图形处理)
33 0
|
4月前
QT基础教程(文本绘制)
QT基础教程(文本绘制)
40 0
|
4月前
|
存储 数据处理 数据格式
QT基础教程(文件操作深入)
QT基础教程(文件操作深入)
45 0
|
4月前
|
编解码 区块链 Windows
QT基础教程(QPalette和QIcon)
QT基础教程(QPalette和QIcon)
50 0
|
4月前
|
存储
QT基础教程(QT中的文件操作)
QT基础教程(QT中的文件操作)
43 0
|
4月前
|
开发者 索引
QT基础教程(布局管理器)
QT基础教程(布局管理器)
67 0
|
4月前
|
数据安全/隐私保护
QT基础教程(对话框2)
QT基础教程(对话框2)
32 0
|
4月前
QT基础教程(对话框1)
QT基础教程(对话框1)
33 0