-2

GUIにQtを使い始めましたが、一部の機能が不足しているため、ヘッダー/ライブラリに問題があります。

それらの2つは次のとおりです。

<obj_name>.setModal(true);
<obj_name>.exec();

私がフォローしているビデオ(6:30)のように、正常に動作するはずです。

私は彼らがしたことを正確にしたので、私の手がかりは彼のバージョンが私のものと同じではないということです。

どのヘッダーを含めるべきか知りたいのですが。

これが私のコードです:

void MainWindow::on_actionNew_Window_triggered()
{
    MyDialog mDialog;
    mDialog.setModal(true);
    mDialog.exec();

}

でもで:

#include <QDialog>

それでも動作しません。それは言う:

C:\ QtSDK \ teste-build-desktop-Qt_4_8_1_for_Desktop_- MinGW _Qt_SDK__Debug .. \ teste \ mainwindow.cpp:22:エラー:「クラスMyDialog」には「setModal」という名前のメンバーがありません。

mydialog.hコード:

#ifndef MYDIALOG_H
#define MYDIALOG_H

#include <QMainWindow>
#include <QDialog>

namespace Ui {
class MyDialog;
}

class MyDialog : public QMainWindow
{
    Q_OBJECT

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

private:
    Ui::MyDialog *ui;
};

#endif // MYDIALOG_H

mainwindow.cppこれはandに含まれていますmydialog.cpp(ヘッダーは単なるクラスです)。

4

2 に答える 2

1

MyDialogいいえQDialogです。ダイアログのない「メインウィンドウ」として作成しました。

これを(QtCreatorを使用してダイアログを再作成せずに)ホットフィックスするには、継承をmydialog.h 次のように書き直します。

class MyDialog : public QMainWindow

に:

class MyDialog : public QDialog

あなたの中には、スーパークラスコンストラクターを呼び出すmydialog.cppコンストラクターの実装があります。MyDialogスーパークラスを変更したばかりなので、この呼び出しも次のように変更する必要があります。

MyDialog::MyDialog(QWidget *parent) :
    QMainWindow(parent)
...

MyDialog::MyDialog(QWidget *parent) :
    QDialog(parent)
...

また、ウィジェット全体をメインウィンドウからダイアログにモーフィングするには、.uiファイルを修正する必要があります。数分でその方法を追加します(それを見つける必要があります).uiファイルに触れる必要はありません。

于 2012-10-27T20:23:01.753 に答える
1

MyDialogクラスからsetModal()を呼び出そうとしていますが、setModalメソッドを持たないQMainWindowから継承しています。代わりに、QDialogから継承する必要があります。

于 2012-10-28T00:36:37.613 に答える