1

私はC++とQTを初めて使用し、QT Creatorを使用し、nGuiという名前のQTウィジェットプロジェクトを作成し、mydlgという名前のQT-QT Designerフォームクラスを追加しました。ウィンドウにボタンを作成しようとしていますが、クリックすると、元のウィンドウが表示されたまま、別のウィンドウが開きます。これが私のコードですが、常にエラーが表示されます:「my2」はこのスコープで宣言されていません。私はwidget.hで「my2」を宣言し、mydlg.cppにwidget.hファイルをインクルードしました。どこが間違っているのかわかりません。誰かが私を助けてくれますか?どうもありがとう!

mydlg.cpp

#include "mydlg.h"
#include "ui_mydlg.h"
myDlg::myDlg(QWidget *parent) :
QDialog(parent),
ui(new Ui::myDlg)

{
     ui->setupUi(this);
}

myDlg::~myDlg()

{

    delete ui;

}


void myDlg::on_pushButton_clicked()

{

     my2.show();

}

widget.h

#ifndef WIDGET_H

#define WIDGET_H

#include <QWidget>

#include"mydlg.h"

namespace Ui 
{
    class Widget;
}

class Widget : public QWidget
{
    Q_OBJECT

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

    private:
    Ui::Widget *ui;
    myDlg my2;
    private slots:
    void on_pushButton_clicked();
};

 #endif // WIDGET_H

main.cpp

#include <QtGui/QApplication>

#include "widget.h"

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    Widget w;
    w.show();

    return a.exec();
}
4

2 に答える 2

0

my2クラスで宣言されてWidgetいますが、クラスのメンバー関数でアクセスしようとしていますmyDlg

于 2013-02-22T06:04:35.107 に答える
0

次のように置き換えmy2.show()てみてください。クラスshow() で記述しているときは、myDlgそのクラスからインスタンス化できるすべてのオブジェクトの動作を記述しています(を含むmy2)。

my2その場合、クラス内で参照することは意味がありませんMyDlg。クラスを使用している他の誰かが、代わりに(たとえば)それを使用して別のオブジェクトをインスタンス化する可能性があるためmy3です。あなたがしたいことは_pushButton_clicked()、クラスのオブジェクトでonが呼び出されたときにコンパイラに指示し、同じオブジェクトで関数MyDlgを呼び出すことです。show()これは、書くthis->show()か、または単に行うことで実行できますshow()

于 2016-01-17T20:23:23.600 に答える