话说Qt很强大,可当下遇到的问题也太不过思议了吧!
来源:互联网 发布:mastercam9.1车床编程 编辑:程序博客网 时间:2024/04/29 00:53
本人是最近才学习用 Qt 做东西,不知道是自己的基础太差,还是什么问题。下面的问题显得非常不可思议。
我想要做一个这样的界面:
定义一个由10个坚直的滑块形成的控件:
(代码段1)
class CurveBase : public QWidget{ Q_OBJECTpublic: explicit CurveBase(QWidget *parent = 0); ~CurveBase(); void SetRange( qint16 min , qint16 max , bool dot = false ); //设置值的范围public slots:signals:private: QVector< QPointer<QLabel> > m_lables; QVector< QPointer<QSlider> > m_sliders; qint16 m_value_min; //最小值 qint16 m_value_max; //最大值};
CurveBase,里面有一个 m_lables , m_sliders 成员变量。
m_sliders为10个滑块控制器。
然后看定义一个NormalCurve类,该类出包换一个CurveBase成员变量。
(代码段2)
class NormalCurve : public QDialog{ Q_OBJECTpublic: explicit NormalCurve(QString title , QString unit , qint16 min , qint16 max , bool dot , const QVector<qint16> & srcData , QDialog *parent = 0); ~NormalCurve(); static QVector<qint16> SetCurve( QString title , QString unit , qint16 min , qint16 max , bool dot , const QVector<qint16> & srcData , QDialog *parent = 0);signals: void UpdateCurveDatas( const QVector<qint16> & datas ); void UpdateCurveData( quint8 index , qint16 value );public slots:private: void BuildWidget(void); // qint16 m_min, m_max; bool m_dot; quint8 m_focus_on; QVector<qint16> m_data; //Widget QPointer<CurveBase> m_curve;};
可见 NormalCurve 类中有一个 Vector m_data 元素,还有一个 quint8 m_focus_on 成员变量。
现在,我在 main() 中调用
(代码段3)
int main(int argc, char *argv[]){ QApplication a(argc,argv); QTextCodec::setCodecForTr(QTextCodec::codecForName("utf8"));//设置中文字体编码 QVector<qint16> vect(10,137); NormalCurve dlg (QObject::tr(""), QObject::tr(""), 125, 160, true, vect ); dlg.show(); return a.exec();}
1、首先定义一个 vect 容器,vect(10, 137),就是向容器里装 10 个 值为 137 的 qint16 类型的元素。
2、定义一个 NormalCurve 类型的 dlg ,并显示。
3、然后,我打印一下 vect 容器内的所有元素的值。
当dlg 被实例化时,就会调用 NormalCurve 的构造函数,问题就出在 可以 NormalCurve 构造函数上。该函数的实现如下:
NormalCurve::NormalCurve(QString title , QString unit , qint16 min , qint16 max , bool dot , const QVector<qint16> & srcData , QDialog *parent) : QDialog(parent){ m_data.resize(10); for ( int i = 0 ; i < 10 ; i ++ ){ if (srcData[i] >= min && srcData[i] <= max){ m_data[i] = srcData[i]; } } BuildWidget(); m_curve->SetRange(min,max,dot);}在程序执行到这个函数时,min = 125 , max = 160 , srcData[0~9] = 137;
在for 循环中 m_data[0~9] 的值都被赋成了 137 。
可就是调用了 m_curve->SetRange( min, max , dot ) 后,m_data[0~9] 的值全变成了 125 去了。而且,m_focus_on 变成了 9.
我想不明白的是,调用 m_curve 的成员函数,怎么会改变 m_data 与 m_focus_on 的值呢?
m_curve->SetRange() 函数的具体实现如下 :
void CurveBase::SetRange( qint16 min , qint16 max , bool isDot ) //设置值的范围{ m_value_min = min; m_value_max = max; for (int i = 0 ; i < 10 ; i ++){ m_sliders[i]->setRange(min, max); } ……}特别指出,NormalCurve::m_data[0~9] 的值是在 CurveBase::SetRange 函数作 m_sliders[i]->setRange( min , max ) 时被改变的。
同时被改变的还有 NormalCurve::m_focus_on 。
请 Qt 达人指点,我真是无计可施了。
- 话说Qt很强大,可当下遇到的问题也太不过思议了吧!
- 写的太差了,不过也贴出来
- 近期有点小成就了,不过遇到的问题也更多了
- 太强大的回帖了................................
- 总算找到了问题的原因了,爽,不过感觉自己太粗心了。
- 强大的g++呢还是强大的C++?太假了吧
- wget太强大了
- Webzip 太强大了
- libusb太强大了
- 代理---代理---代理(这也把问题说清楚了,不过某些命名不是很规范)
- 今天遇到关于JAVA INTEGER类型的问题 不过还好 现在解决了,
- 话说win8是不是太烂了点
- 晕,CSDN也太不稳定了吧。。。。。
- 马诺居然上纽约时报了 很不可思议
- 【ILSpy反编译】C# 写的程序反编译查看是不是也太容易了点吧,太恐怖了。。。
- ~~~~哭笑不得.不过确实太match了
- QML学习文档 - huangchunquanmaker的日志 - 网易博客 太详细全面了,很好很强大【z】
- 应对vs更新程序引用集的小bug问题的方案 很不可思议的解决方法
- android学习笔记6:使用Framelayout实现霓虹灯效果
- 将服务器上oracle数据备份到本地
- value stack 和 (stack)action context 的访问
- multiple definition of XXXX
- QT Pushbutton 美化
- 话说Qt很强大,可当下遇到的问题也太不过思议了吧!
- 下厨房的搜索OR分类之思
- Linux 连续执行多条命令的方法
- 快升级Eclipse吧
- 物化视图PCT特性(1)
- Pacemaker介绍
- gdb 调试中No symbol in current context 故障定位
- c# tabcontrol 点击不同的tabpage 触发不同的事件
- 数据库 小知识