1

これがばかげた質問である場合は申し訳ありません。私は怠惰ではありません。私はQt 4 を使用した C++ GUI プログラミングに従っていますが、本の例の 1 つは、Qt がどのように機能しているかとは異なります。

ダイアログを作成してから、いくつかのシグナルとスロットを接続します。それはうまくいかないので、いくつかの現実のチェックを試みました。オブジェクトのプロパティを手動で編集することさえできません。

メインはこちら

#include <QApplication>
#include <QDialog>
#include <iostream>
#include "ui_gotocelldialog.h"

using namespace std;

int main(int argc, char *argv[])
{
    QApplication app(argc, argv);
    Ui::GoToCellDialog ui;
    QDialog *d = new QDialog;
    ui.setupUi(d);
    d->show();
    return app.exec();
}

ここに私のダイアログ.cppファイルがあります

#include "gotocelldialog.h"
#include "ui_gotocelldialog.h"
#include <iostream>
using namespace std;

GoToCellDialog::GoToCellDialog(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::GoToCellDialog)
{
    cout << "!!!!!!!!!!!!!!!!!!!!!"; // i never see this
    ui->setupUi(this); // but if i comment out this it doesnt init
    ui->okButton->setEnabled(true); // this does nothing
}

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

これは、デザイン モードの GoToCellDialog フォームです。 ここに画像の説明を入力

デフォルトでは無効になっているokButtonを有効にしようとしています。また、 << "abc"; を計算すると、それは現れません。これについて少し説明していただけますか?

4

1 に答える 1

1

コードにいくつかの問題があります。

GoToCellDialogクラスを作成し、そのコンストラクターを実装しました。ただし、このクラスのオブジェクトは作成しません。もちろん、コンストラクターは実行されていません。メイン関数でQDialogtoを置き換える必要があります。GoToCellDialog

本当にQDialog, notが必要な場合は、 , notからクラスQWidgetを派生させる必要があります。Qt Creator でデザイナー フォーム クラスを作成する際のオプションがあります。GoToCellDialogQDialogQWidget

メイン関数でaUi::GoToCellDialogを作成しますが、クラスで別の a が作成されます(プライベート メンバーGoToCellDialogに注意してください)。uiクラスをインスタンス化すると、2 つのインスタンスが生成されますが、Ui::GoToCellDialog実行すべきではありません。Ui::GoToCellDialogメイン関数から削除します。

GoToCellDialogあなたが定義したクラスとUi::GoToCellDialog内部で生成されたクラスを混同したと思います。Ui::GoToCellDialog uiのプライベート メンバーGoToCellDialogなので、他の場所でインスタンス化する必要はありません。

参照:電卓フォームの例.

于 2013-07-10T20:42:40.673 に答える