QT学习7:1个事物领导另一个
2011-12-12 16:02
281 查看
LCDRange.h
LCDRange.cpp
main
1.QGridLayout,和列有关,比如(6,12),因为才12个,那就网格成一行了,
2.信号只声明,不能定义.一定义就提示错误
3.信号的调用可以通过emit valueChanged(xx)这样被其他调用
4.connect好像不做代码检查的,也就是无论SIGNAL()和 SLOT()中填的是不是已存在的函数,它都认为OK,编译通过
#ifndef LCDRANGE_H_ #define LCDRANGE_H_ #include <QWidget.h> class QSlider; class LCDRange:public QWidget { Q_OBJECT public: LCDRange(QWidget* parent=NULL, const char *name=NULL); int value() const; public slots: void setValue(int); signals://信号只声明,不能定义. void valueChanged(int); private: QSlider *slider; }; #endif//LCDRANGE_H_
LCDRange.cpp
#include "LCDRange.h" #include <QSlider.h> #include <QLCDNumber.h> #include <QVBoxLayout> LCDRange::LCDRange(QWidget* parent, const char *name) :QWidget(parent, name) { QLCDNumber *lcd = new QLCDNumber(2, this); slider = new QSlider(Qt::Orientation::Horizontal, this); slider->setRange(0, 99); slider->setValue(0); //别把display(int)写成Display(int)了,不然不会响应的,而且你就算写成display1, //编译器也不会报错,只是不响应 // connect(slider, SIGNAL(valueChanged(int)), lcd, SLOT(display(int))); //信号-->类的信号--> connect(slider, SIGNAL(valueChanged(int)), SIGNAL(valueChanged(int))); QVBoxLayout *vlayout = new QVBoxLayout; vlayout->addWidget(lcd); vlayout->addWidget(slider); setLayout(vlayout); } int LCDRange::value() const { return slider->value(); } void LCDRange::setValue(int value) { slider->setValue(value); }
main
#include "qtlesson.h" #include <QtGui/QApplication> #include <QPushButton.h> #include <QFont.h> #include <QVBoxLayout> #include <QGridLayout> #include "LCDRange.h" class MyWidget : public QWidget { public: MyWidget(QWidget *parent=NULL, const char *name=NULL); }; MyWidget::MyWidget(QWidget* parent, const char *name) { QPushButton *quit = new QPushButton("Quit", this); quit->setFont(QFont(("Times"), 18, QFont::Bold)); connect(quit, SIGNAL(clicked()), qApp, SLOT(quit())); QVBoxLayout *vlayout = new QVBoxLayout; //QGridLayout,这里和列有关,比如(6,12),因为才12个,那就网格成一行了, QGridLayout *grid = new QGridLayout(6, 12); LCDRange *previous = 0; for (int r=0; r<3; r++) { for (int c=0; c<4; c++) { LCDRange *lr = new LCDRange(this); if (previous) { connect(lr, SIGNAL(valueChanged(int)), previous, SLOT(setValue(int))); } grid->addWidget(lr); previous = lr; } } vlayout->addWidget(quit); vlayout->addLayout(grid); setLayout(vlayout); } int main(int argc, char *argv[]) { QApplication a(argc, argv); MyWidget w; a.setMainWidget(&w); w.show(); return a.exec(); }
1.QGridLayout,和列有关,比如(6,12),因为才12个,那就网格成一行了,
2.信号只声明,不能定义.一定义就提示错误
3.信号的调用可以通过emit valueChanged(xx)这样被其他调用
4.connect好像不做代码检查的,也就是无论SIGNAL()和 SLOT()中填的是不是已存在的函数,它都认为OK,编译通过
相关文章推荐
- QT学习7:1个事物领导另一个
- Qt-一个事物领导另一个
- Qt教程一 —— 第七章:一个事物领导另一个
- 关于学习Qt的一些感触
- QT学习笔记之五 HexSpinBox
- OpenGL_Qt学习笔记之_02(绘制简单平面几何图形)
- 【Qt学习笔记】12.树、列表和表格 The Item Views
- OpenGL_Qt学习笔记之_02(绘制简单平面几何图形)
- Qt学习之路-简易画板5(完成)
- Qt Installer Framework的学习
- Qt事件学习1
- Qt学习之路——对象模型
- qt 学习(六) 数据库注册用户
- Qt 学习之路 2(66):访问网络(2)
- Qt学习经验之quit()、exit()、close()《转载》
- Qt Model/View 学习笔记
- QT之GUI学习笔记--parent参数
- Qt+openGL学习记录(4)`如何实现物体在三维坐标系中的旋转`
- Qt学习点滴积累
- selenium webdriver学习(十)------------如何把一个元素拖放到另一个元素里面