2017-12-16 20 views
0

私のプロジェクトでは、Qt Designerフォームクラスmainwindow.uiを宣伝しました。私はdoublerect.uiと名付けられました.2つのQspinBoxesの1つがsb_rect_heightであり、他の1つがsb_rect_widthです。今私はgetterssettersを作成したので、それらのspinboex値をmainwindow.thereに渡す必要があります。しかし、getterからmainwindowにアクセスすると、これらの値は0 This main weight , 1072693248 This main heightのように表示されます。ですから、私に教えてください、私に解決策を教えてください。mainwindowからスピンボックスの値にアクセスするにはどうすればいいですか? DoubleRectクラスのThis my complete code昇格したフォームのQSpinBoxes値をMainWindowに渡す方法

doublerect.cpp

#include "doublerect.h" 
#include "ui_doublerect.h" 
#include "mainwindow.h" 
#include "qdebug.h" 

DoubleRect::DoubleRect(QWidget *parent) : 
    QWidget(parent), 
    ui(new Ui::DoubleRect) 
{ 
    ui->setupUi(this); 
    connect(ui->sb_rect_height, static_cast<void (QSpinBox::*)(int)>(&QSpinBox::valueChanged), 
      this, &DoubleRect::setHeight); 
    connect(ui->sb_rect_width, static_cast<void (QSpinBox::*)(int)>(&QSpinBox::valueChanged), 
      this, &DoubleRect::setWidth); 
} 

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

int DoubleRect::getWidth() const 
{ 
    return width; 
} 

void DoubleRect::setWidth(int value) 
{ 
    width = value; 
} 

int DoubleRect::getHeight() const 
{ 
    return height; 
} 

void DoubleRect::setHeight(int value) 
{ 
    height = value; 
} 

mainwindow.cpp

#include "mainwindow.h" 
#include "ui_mainwindow.h" 
#include <qdebug.h> 
#include <QColorDialog> 

MainWindow::MainWindow(QWidget *parent) : 
    QMainWindow(parent), 
    ui(new Ui::MainWindow) 
{ 
    ui->setupUi(this); 
    scene = new QGraphicsScene(this); 
    ui->graphicsView->setScene(scene); 
    ui->widgethide->setVisible(true); 
} 

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

void MainWindow::addRect() 
{ 

    DoubleRect *obj = new DoubleRect(); 
    int height = obj->getHeight(); 
    int width = obj->getWidth(); 
    qDebug()<< height <<"This main height"; 
    qDebug()<< width <<"This main width"; 

} 

void MainWindow::on_btnRect_clicked() 
{ 
    addRect(); 
} 

答えて

0

方法setHeightsetWidthセクションにする必要があります - プライベートスロット。

public: 
    explicit DoubleRect(QWidget *parent = 0); 
    ~DoubleRect(); 

    int getWidth() const; 
    int getHeight() const; 
public slots: 

private slots: 
    void setHeight(int value); 
    void setWidth(int value); 

EDIT

addRectメソッドが呼び出されると、DoubleRectのコンストラクタで、あなたが信号valueChanged()あなたのスロットを持つスピンボックスの 割り当てる - setHeightsetWidthは、あなたは、幅と高さがqDebug()を使用して印刷したいです しかし、まずスロットを呼び出すためにスピンボックスの値を変更する必要があります。また、高さの幅を設定することもできます。

addRect()メソッドを呼び出すたびにobjを作成することはできません。このオブジェクトは1回だけ作成する必要があります。 シグナルスロットの接続が行われ、スピンボックスの値が変更されると、スロットの高さと幅の設定が正しく呼び出されます。あなたがMainWindowのメンバーとしてDoubleRectオブジェクトを定義することができ

EDIT 2

class MainWindow : public QMainWindow 
{ 
    Q_OBJECT 
private: 
    Ui::MainWindow *ui; 
    QGraphicsScene * scene; 
    QGraphicsView * view; 
    DoubleRect* obj; 
}; 

、今、あなたがスピンボックスの値を変更したときにメインウィンドウ

MainWindow::MainWindow(QWidget *parent) : 
QMainWindow(parent), 
ui(new Ui::MainWindow) 
{ 
    ui->setupUi(this); 
    //... 
    obj = new DoubleRect(); 
} 

のctorの中にスロットをこのオブジェクトを作成しますsetWidth/setHeightが呼び出され、 'addRect'メソッドを呼び出すと正しい値が得られるはずです。

EDIT 3

私はそう

[1] doublerectに変更し、私はそれが動作するいくつかの変更後にQT 4.8.4を使用して、プロジェクトをダウンロードしています。

DoubleRect::DoubleRect(QWidget *parent) : 
QWidget(parent), 
ui(new Ui::DoubleRect) 
{ 
    ui->setupUi(this); 
    // NEW LINES !!! 
    connect (ui->sb_rect_height, SIGNAL(valueChanged(int)), this, SLOT(setHeight(int))); 
    connect (ui->sb_rect_width, SIGNAL(valueChanged(int)), this, SLOT(setWidth(int))); 
} 

cppを使用SIGNALとの間の接続を行うために機能を接続する - SLOT

[2]

doublerect.h
class DoubleRect : public QWidget 
{ 
    Q_OBJECT 
public: 
    explicit DoubleRect(QWidget *parent = 0); 
    ~DoubleRect(); 

    int getWidth() const; 
    int getHeight() const; 
public slots: 
private slots:  // NEW LINES, these methods must be slots 
    void setHeight(int value); 
    void setWidth(int value); 
private: 
    Ui::DoubleRect *ui; 
    int width; 
    int height; 
}; 

の変化と最も重要なこと、メインウィンドウの変更.cpp

void MainWindow::addRect() 
{ 
    //DoubleRect *obj = new DoubleRect(); // don't create new object 
    int height = ui->widgethide->getHeight(); 
    int width = ui->widgethide->getWidth(); 
    qDebug()<< height <<"This main height"; 
    qDebug()<< width <<"This main width"; 
} 

DoubleRectオブジェクトを作成する必要はありません。このオブジェクトはすでに存在し、このオブジェクトのインスタンスへのポインタはui->widgethideです。

+0

私はこれらの変更を行いましたが、解決しませんでした – Learner

+0

これで私は今すぐ何をする必要がありますか?完全なサンプルコードsolution.please – Learner

+0

私はそうしました。私のgithubプロジェクトファイルをチェックし、いくつかの修正を加えてください。私はthis.pleaseとスタックしているので、これを解決するのを助けて – Learner

関連する問題