• 6554阅读
  • 10回复

请教问题,类的调用 [复制链接]

上一主题 下一主题
离线kingbox
 

只看楼主 倒序阅读 楼主  发表于: 2008-10-23
— 本帖被 XChinux 执行加亮操作(2008-11-02) —
总共三个文件,我有个对话框MyDialog,里面有一个表Table,当点击按钮data_base时,弹出新窗口MyDialog1 ,它也有一个表Table1 ,但这个Table1怎么才能复制MyDialog的Table的内容呢?可以通过Table->text()返回Table里面的值,但是我该怎么从Dialog1里面调用Dialog的Table的text()函数呢?

还有一个问题,我按下面的文件编译,出现dialog.cpp:‘w’ undeclared的错误,这w不是在main.cpp里面定义了么?为什么会在dialog.cpp里出现这样的错误?
第一个是main.cpp:
#include "dialog.h"

int main( int argc, char ** argv )
{
    QApplication a( argc, argv );
    MyDialog* w = new MyDialog();
    w->show();
    a.connect( &a, SIGNAL( lastWindowClosed() ), &a, SLOT( quit() ) );
    return a.exec();
}

第二个是dialog.h:
class MyDialog : public QDialog
{
    Q_OBJECT

public:
    MyDialog( QWidget* parent = 0, const char* name = 0, bool modal = FALSE, WFlags fl = 0 );
    ~MyDialog();

    QTable* Table;

public slots:
    virtual void gen_data();
};

class MyDialog1 : public QDialog
{
    Q_OBJECT

public:
    MyDialog1( QWidget* parent = 0, const char* name = 0, bool modal = FALSE, WFlags fl = 0 );
    ~MyDialog1();

    QTable* Table1;

public slots:
    virtual void copy_data();
};

第三个文件是dialog.cpp:
#include "dialog.h"

MyDialog::MyDialog( QWidget* parent,  const char* name, bool modal, WFlags fl )
    : QDialog( parent, name, modal, fl )
{
    Table = new QTable( Tab_3, "Table" );
    Table->setGeometry( QRect( -2, 90, 241, 191 ) );
    Table->setNumRows( 10 );
    Table->setNumCols( 10 );

    data_base = new QPushButton( Tab_3, "data_base" );
    data_base->setGeometry( QRect( 115, 15, 31, 21 ) );
    data_base->setText( tr( "chaxun" ) );

    MyDialog1 *dlg1 = new MyDialog1;
    connect( data_base, SIGNAL( clicked() ), dlg1, SLOT( copy_data() ) );

MyDialog::~MyDialog()
{
}

void MyDialog::gen_data()
{
    int i,j,k;
    k = 0;
    QString str;
    for(i=0;i<10;i++)
        for(j=0;j<10;j++)
    {
       k++;
       str = QString("%1").arg(k);
         Table->setText(i,j,str);
    } 
}

MyDialog1::MyDialog1( QWidget* parent,  const char* name, bool modal, WFlags fl )
    : QDialog( parent, name, modal, fl )
{

    Table1 = new QTable( this, "Table1" );
    Table1->setGeometry( QRect( 5, 35, 230, 205 ) );
    Table1->setNumRows( 10 );
    Table1->setNumCols( 10 );

MyDialog1::~MyDialog1()
{
}

void MyDialog1::copy_data()
{
    int i,j;
    QString str;
    for(i=0;i<10;i++)
        for(j=0;j<10;j++)
    {
       str = w->Table->text(i,j);
         Table1->setText(i,j,str);
    }
    show();
}





离线axlrose

只看该作者 1楼 发表于: 2008-10-23
Re:请教问题,类的调用    str = w->Table->text(i,j);
    str = w->Table->text(i,j);
枪炮与玫瑰
离线kingbox

只看该作者 2楼 发表于: 2008-10-24
你看我程序最后,我用得就是你写的这样的啊,可是不行啊,请问还有什么办法?
离线浪漫天使
只看该作者 3楼 发表于: 2008-10-24
受不了了,基本的c++ ,w是在main里面的变量,你就想在MyDialog1类的函数里面拿来就用!!?????
离线chaoscxm
只看该作者 4楼 发表于: 2008-10-24
将w声明为全局变量
帖子签名(将在每个帖子下方显示)
离线kingbox

只看该作者 5楼 发表于: 2008-10-24
没用,我试过申明为全局变量,但问题是:
首先编译器将dialog.h 和 dialog.cpp 编译
然后再执行main()函数内的语句
如此,我的dialog.cpp的copy_data()实际上是使用了一个还没有被声明的变量w
而不是我想的那样,使用main里面定义那个w
离线kingbox

只看该作者 6楼 发表于: 2008-10-24
引用第3楼浪漫天使于2008-10-24 08:03发表的  :
受不了了,基本的c++ ,w是在main里面的变量,你就想在MyDialog1类的函数里面拿来就用!!?????

呵呵,我知道问题在哪,我是想问一个解决办法,我这不是经验少嘛,大哥别生气。
离线浪漫天使
只看该作者 7楼 发表于: 2008-10-24
只求达到功能版本
描述:只求达到功能版本
附件: tablecopy.rar (2 K) 下载次数:3
离线浪漫天使
只看该作者 8楼 发表于: 2008-10-24
带点qt技巧的版本
描述:带点qt技巧的版本
附件: tablecopy.rar (2 K) 下载次数:4
离线浪漫天使
只看该作者 9楼 发表于: 2008-10-24
还有一个思路就是 用一个数据结构 来存放 表格的数据,不管那个对话框的表格要显示 时候 到这个数据结构里面取就是了,界面改变了数据也保存到这个结构里面,这样就保持一致了。算是带点架构的意思吧,方法多着呢。
离线kingbox

只看该作者 10楼 发表于: 2008-10-24
引用第9楼浪漫天使于2008-10-24 10:49发表的  :
还有一个思路就是 用一个数据结构 来存放 表格的数据,不管那个对话框的表格要显示 时候 到这个数据结构里面取就是了,界面改变了数据也保存到这个结构里面,这样就保持一致了。算是带点架构的意思吧,方法多着呢。

恩,我昨天也想这么做,单独存放数据,无论哪个窗口要用都单独去调用,但是想到了前面的那种简单方法又不去想办法实现一下,心里堵得慌。呵呵
快速回复
限100 字节
 
上一个 下一个