0

Qt Creator で簡単な GUI を作っています。

mainwindow.cpp ファイルに 'openFile' 関数を作成しようとしていますが、この関数を mainwindow 自体のメンバーにするか、別の静的関数にするか、ウィジェットのメンバーにするかがわかりません。

この関数は本当に単純です。QFileDialog を呼び出し、ファイルへのパスを取得し、これまでに見たメニュー バーのすべてのファイルを開くコマンドのようにファイルを開きます。

ここに私が抱えている大きな問題があります。たとえば、関数内からUI要素にアクセスできるように、この関数をmainwindowのメンバーにしてみましたが、そうするとui->QTableWidget信号をスロットに正しく接続できません。connect には構文があるため、それを行うにはメインウィンドウへの参照が必要なので、大量のエラーが発生しますconnect(sender, signal, receiver, slot)

次に、関数を独自に分離することにしましたが、どの UI 要素にもアクセスできません。

この問題を解決するにはどうすればよいですか?

編集 これが私がコンストラクターでやっていることです。

//Constructor
MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    QObject::connect(ui->actionOpen, &QAction::triggered, *parent, &MainWindow::openFile);
    ui->tableWidget->setColumnCount(16);
}

結果のエラーは次のとおりです。

C:\workspace\audioPipe\audioPipe\mainwindow.cpp:76: error: C2664: 'QMetaObject::Connection QObject::connect<void(__cdecl QAction::* )(bool),void(__cdecl MainWindow::* )(void)>(const QAction *,Func1,const MainWindow *,Func2,Qt::ConnectionType)' : cannot convert parameter 3 from 'QWidget' to 'const MainWindow *'
with
[
    Func1=void (__cdecl QAction::* )(bool),
    Func2=void (__cdecl MainWindow::* )(void)
]
No user-defined-conversion operator available that can perform this conversion, or the operator cannot be called
4

1 に答える 1

0

コンパイラは、connect() の 3 番目のパラメータとして、MainWindow へのポインタ、つまりconst MainWindow *. ただし*parent、タイプの を渡しQWidgetます。さらに、parentそれは MainWindow オブジェクトの親であるため、とにかく間違ったオブジェクトですが、 MainWindow オブジェクト自体を渡したいのですが、それはthis.

したがって、次のようなものが機能するはずです。

    QObject::connect(ui->actionOpen, &QAction::triggered, this, &MainWindow::openFile);
于 2013-06-19T21:03:56.667 に答える