2014-03-07 115 views
0

我做了一個DDisplay類來顯示我的數據在GUI文本框,但我有一些奇怪的情況,當我從mainwindow類調用它的功能它工作正常但當我嘗試從其他類調用相同的函數時,它不起作用。下面是小的代碼我的程序顯示不顯示在其他類的文本框中qt

mainwindow.h

#ifndef MAINWINDOW_H 
#define MAINWINDOW_H 
#include <ddisplay.h> 
#include <QMainWindow> 
#include "test.h" 

namespace Ui { 
class MainWindow; 
} 

class MainWindow : public QMainWindow 
{ 
Q_OBJECT 

public: 
explicit MainWindow(QWidget *parent = 0); 
~MainWindow(); 
DDisplay b; 
Test c; 
private slots: 
void display(const QString &a); 

void on_pushButton_clicked(); 

private: 
Ui::MainWindow *ui; 
}; 

mainwindow.cpp

#include "mainwindow.h" 
#include "ui_mainwindow.h" 

MainWindow::MainWindow(QWidget *parent) : 
QMainWindow(parent), 
ui(new Ui::MainWindow) 
{ 
ui->setupUi(this); 
QObject::connect(&b,SIGNAL(display(QString)),this,SLOT(display(QString))); 
} 

MainWindow::~MainWindow() 
{ 
delete ui; 
} 

void MainWindow::display(const QString &a){ 

ui->textBrowser->setText(a); 
} 

void MainWindow::on_pushButton_clicked() 
{ 
b.printf("hello"); //this function working fine 
//c.printf("lllll"); //not working 
} 

test.h

#ifndef TEST_H 
#define TEST_H 
#include <QString> 
#include <ddisplay.h> 
class Test 
{ 
public: 
Test(); 
void printf(const QString &a); 
DDisplay b; 
}; 

TEST.CPP 的#include「的考驗。 h「

Test::Test() 
{ 
} 
void Test::printf(const QString &a){ 
b.printf(a); 
} 

ddisplay.h 的#include

class DDisplay : public QObject 
{ 
Q_OBJECT 
public: 
explicit DDisplay(QObject *parent = 0); 
void printf(const QString &a); 
QString b; 
signals: 
void display(const QString &a); 

public slots: 

}; 

ddisplay.cpp 的#include 「ddisplay.h」

DDisplay::DDisplay(QObject *parent) : 
QObject(parent) 
{ 
} 

void DDisplay::printf(const QString &a) 
{ 
b+=a; 
emit display(b); 
} 

回答

2

c.printf("lllll"); //not working

它不工作,因爲你沒有一個連接爲此對象。 Test類中的DDisplay是一個不同於MainWindow中的實例。

下面的註釋中針對您的問題的一種可能的解決方案是在main.cpp或專門的初始化類中連接DDisplay的信號和MainWindow的插槽。

+0

所以我怎麼能得到我想要的結果? – nabeel

+0

我只想做一個普通的類來顯示,這樣我就可以從任何類訪問它..我可以得到它嗎? – nabeel