• 9911阅读
  • 12回复

一个类中如何访问另一类中的成员变量 [复制链接]

上一主题 下一主题
离线stone123
 
只看楼主 倒序阅读 楼主  发表于: 2009-07-23
我定义了一个类
class  QespTest:public Qwdget
{
{
  Q_OBJECT
public:
  QespTest(QWidget *parent=0);

  virtual ~QespTest();

  QTextEdit *received_msg;
  QextSerialPort *port;
public slots:
   void serialOperate();
};
然后我有定义了一个线程类Thread
在构造函数Thread ::Thread()
{
QespTest *esp =new QespTest();

}
请问我如何在Thread ::run()中访问received_msg,port?
离线rqzrqh

只看该作者 1楼 发表于: 2009-07-23
这个是C++知识吧
方法有多种,一种是把函数定义为static
离线sbtree
只看该作者 2楼 发表于: 2009-07-23
直接用esp->received_msg, esp->port
因为你定义的公有成员变量,可以直接访问的

看来楼主要先好好学学c++才行啊,这种最基础的东西在这种论坛里面提问不太合适,或者你可以先找一个学习网站先补补
windows 7 + VC++2008 + Qt4.5.2
离线jpchen609
只看该作者 3楼 发表于: 2009-07-23
顶顶
我喜欢,我个性
离线jpchen609
只看该作者 4楼 发表于: 2009-07-23
顶顶
我喜欢,我个性
离线stone123
只看该作者 5楼 发表于: 2009-07-24
sbtree我和你想的一样,主要是我想在Thread ::run()调用received_msg这个QTextedit类的方法,我是这么用的esp->received_msg->append(),make后出错:
invalid use of undefined type struct QTextEdit,
forward declaration of struct QTextEdit;刚开始学QT三周,在linux下做,我贴一下源码
看看有什么错误。
Thread.h
#ifndef THREAD_H
#define THREAD_H

#include<QThread>
class Thread : public QThread
{

    Q_OBJECT
  public:
  Thread();

protected:
   void run();
};
#endif
Thread.cpp
#include <QtCore>

#include "Thread.h"
#include "QespTest.h"
Thread ::Thread()
{

}
void Thread::run()
{
QespTest *esp =new QespTest();
char buff[1024];
int numBytes;
do
{
     numBytes=esp->port->bytesAvailable();
    if(numBytes>0)
    {
      if(numBytes>1024) numBytes=1024;
      int i=esp->port->read(buff,numBytes);
      buff='\0';
      QString msg =buff;
      esp->received_msg->append(msg);
     esp->received_msg->ensureCursorVisible();
    }
}while(numBytes>0);

}

QespTest.h
#ifndef _QESPTEST_H_
#define _QESPTEST_H_
#include <QWidget>
#include <QextSerialPort>
class QLineEdit;
class QTextEdit;
class QextSerialPort;
class QSpinBox;
class QespTest :  public QWidget
{
  Q_OBJECT
public:
  QespTest(QWidget *parent=0);

  virtual ~QespTest();

  QTextEdit *received_msg;
  QextSerialPort *port;
public slots:
   void serialOperate();

private slots:
void closePort();
  void openPort();
};
#endif
我感觉错误就是引用时候的错,但是不知道该怎么写。。。?
[ 此帖被stone123在2009-07-24 09:45重新编辑 ]
离线john123
只看该作者 6楼 发表于: 2009-07-24
QespTest.cpp寫一個public

QTextEdit  XXXX::get_received_ms()
{
return this->received_ms;
}

這樣就可調出這個received_ms
离线stone123
只看该作者 7楼 发表于: 2009-07-24
可是我声明的received_ms是public的,实例化QespTest类,应该可以直接访问的,楼上的方法是访问一个类中的private型的变量的吧,但是我这佯作试一下,谢谢楼上的朋友。。
离线sbtree
只看该作者 8楼 发表于: 2009-07-24
received_msg,估计是楼主没有new出来,因为那是一个指针而已,没有实例化是不能被使用的
windows 7 + VC++2008 + Qt4.5.2
离线john123
只看该作者 9楼 发表于: 2009-07-24
引用第7楼stone123于2009-07-24 12:25发表的  :
可是我声明的received_ms是public的,实例化QespTest类,应该可以直接访问的,楼上的方法是访问一个类中的private型的变量的吧,但是我这佯作试一下,谢谢楼上的朋友。。

可是實例化是本身的東西窩,應該宣告static也可,或者我寫那樣才能調出原來的東西
离线stone123
只看该作者 10楼 发表于: 2009-07-24
我按照john123的方法已经能够编译通过了,改成QTextEdit *  XXXX::get_received_ms()
{
return this->received_ms;
}

可是我一直想不明白为什么我把received_msg声明成public,然后在另一个类中实例化QespTest 类,却不能访问呢?难道真的像john123所说,就算实例化以后,也只能被本类当中的函数访问吗?如果想访问只能用john123的方法吗?
离线landuochong

只看该作者 11楼 发表于: 2009-07-24
在我看来,在thread里处理widget很容易出错
离线stone123
只看该作者 12楼 发表于: 2009-07-25
新的问题出现,我想将接收到得数据显示到QTextEdit中,用下面两句:
esp->get_received_msg()->append(msg);
esp->get_received_msg()->ensureCursorVisible();
但是QTextEdit却无法显示数据?不知道是为什么?
快速回复
限100 字节
 
上一个 下一个