1

からダイアログ型ウィジェットのいくつかの機能にアクセスしたいと思いますmainwindow.cpp

int を返すウィジェット クラスに、次のような単純な関数を作成しました。

dialog.h:

 public:  
      int getRowCountData();

ダイアログ.cpp:

 int Dialog::getRowCountData()
 {
      return ui->tableWidget->rowCount();
 }

使用法:

私のmainWindow.h:

private:
    Dialog *dialog;

私のmainwindow.cpp:

dialog = new Dialog;


int count = dialog->getRowCountData();   <<<<<--------------this throws a read access error!

コード: 0xc0000005 読み取りアクセス違反: 0x0 flas=0x0

この単純なウィジェットのような別のウィジェットのパブリック関数を使用するにはどうすればよいですか?

rowcount 関数を使用して設定したい整数を参照してはいけません。シグナルとスロットは、過去にウィジェット間でデータを転送するために使用するときにうまく機能しましたが、可能であれば、ダイアログ ウィジェットの機能をこのように使用することに固執したいと思います。

AccessingQTableWidget's data from another class という質問を投稿して、他のウィジェットでデータを取得するためのこの方法について考えました。@チェルノブイリ多分あなたは提供するためのさらなる洞察を持っていますか?

前もって感謝します!

4

1 に答える 1

2

いいえ。間違ったポインターを使用する際の問題です。この例外はまさにこれを意味します。

ダイアログ ポインターが null ではなく、おそらく ui->tableWidget が存在しないことを確認してください。Qt Designer で作成したウィジェットを使用する場合は、setupUi を呼び出す必要があります。

これを書きます:

if(!dialog)
qDebug() << "fail";
else
{qDebug() << "good";//your call}

このようなクラッシュが発生するほとんどの場合、

  • オブジェクトを複数回削除する
  • ダングリング ポインター (つまり、既に削除されたオブジェクトへのポインター) へのアクセス
  • ヌルポインタへのアクセス
于 2014-09-18T04:11:49.863 に答える