2016-05-21 4 views
1

私はQtのに新しいですし、私は、次の作業を行うことで問題を抱えているとの間でデータの受け渡し:Qtの二つの形式

PS:私はいくつかの他の回答の質問をチェックしましたが、私は私ができる午前とは思いません問題を解く。

ヘッダ内にsetter/getterを持つ2つの整数を保持し、クラスインスタンスをmainwindow.cppに宣言したクラスを定義しました。 私は保持する(それがすなわちdialogchangesev.hdialogchangesev.cpp別々の.cppと.hの中で独自のサブクラスのしている)QDialogからボタンをクリックした後に、ユーザの入力(2 int複数可)を取得したいです2つのQLineEditを入力し、mainwindow.cppにクラスインスタンスのプロパティを入力した2つのintに設定します。

問題は次のとおりです。エラーが発生しました。 (下図参照)

ありがとうございました。

コードの断片://メインウィンドウ

// dialogchangesev.cpp

DialogChangeSEV::DialogChangeSEV(QWidget *parent) : 
    QDialog(parent), 
    ui(new Ui::DialogChangeSEV) 
{ 
    ui->setupUi(this); 
    connect(DialogChangeSEV, SIGNAL(sendIntData(int, int)), 
         MainWindow, SLOT(setIntData(int,int))); 
// Error : C2275: 'DialogChangeSEV' : illegal use of this type as an expression 
// Error: C2275: 'MainWindow' : illegal use of this type as an expression 
// see declaration of 'MainWindow' 
} 
// code goes here ... 
void DialogChangeSEV::on_setSEV_clicked() 
{ 
    int se, sv; 
    se = ui->setSE->text().toInt(); 
    sv = ui->setSV->text().toInt(); 
// emit sendIntData(se,sv) ; 
} 

//dialogchangesev.h

// code goes here ... 
signals: 
    void sendIntData(int datae, int datav); 
}; 

//mainwindow.h

// code goes here ... 
public slots: 
    void setIntData(int datae,int datav); 

.cpp

// code goes here ... includes and so on 
sizeEV gDimensions; 
// ... 
void MainWindow::setIntData(int datae,int datav){ 
    gDimensions.setSE(datae); 
    gDimensions.setSV(datav); 
} 

答えて

2

接続に問題があります。 Qtフレームワークでは、connectはクラス名ではなくオブジェクトのインスタンスへのポインタをとります。だからあなたは、メインウィンドウのコンストラクタに接続する移動:あなたのmainwindow.cppでそう

connect((pointer to a DialogChangeSEV object), SIGNAL(sendIntData(int, int)), this, SLOT(setIntData(int,int))); 

は、あなたがDialogChangeSEVオブジェクトを宣言していますか?その場合は、そのポインタを使用してください。あなたのメイン・ウィンドウコンストラクタで次に

mainwindow.cpp: 
class MainWindow : public QMainWindow() 
{ 
    Q_OBJECT 
public: 
    ... 
private: 
    DialogChangeSEV *dcsev; 
}; 

後で...

MainWindow::MainWindow(QWidget *parent = 0) 
{ 
    dcsev = new DialogChangeSEV(...); 
    connect(dcsev, SIGNAL(sendIntData(int, int)), this, SLOT(setIntData(int, int)); 
    ... 
} 

はその助けをしていますか?

2

あなたがタイプではなく、接続するためにオブジェクトを渡す必要があります:http://doc.qt.io/qt-5/signalsandslots.html

MainWindow *mainWindow; 
DialogChangeSEV *dialog; 

... 

connect(dialog, SIGNAL(sendIntData(int, int)), 
     mainWindow, SLOT(setIntData(int,int))); 

はQt5でのシグナルとスロットのためのリファレンスを見てください。

関連する問題