さて、Qt Designer を使用して GUI を構築しています。menuBar を作成する方法を理解することができ、バーにいくつかのアクションを追加しましたが、アクションを接続して何かを実行させる必要があります。
具体的には、私のファイル メニューには、単純な開くアクションがあります。このアクションで QFileDialog などを呼び出す関数を実行したいのですが、その方法がわかりません。
では、actionOpen を静的関数に接続するにはどうすればよいでしょうか。
最新の Qt 5.0.2 を使用しています
私はここで少しイライラしています。これは明らかに、誰かがしなければならない最も基本的なことの 1 つですが、Web 上のどこにもこれに対する実際の解決策は見つかりません。不足している Qt wiki から、他の人々の質問まで、誰も明確な答えを持っていないようです。古いバージョンの Qt には回答がありますが、それらの古いバージョンでは明らかに信号が静的関数に接続できなかったため、それらは無関係です。そして、Qt Designer を介してこれを行う方法を誰も知らないようです。また、どこに何を入れるかを明確にする人は誰もいません。
main.cpp ファイルに次の行があります。
QObject::connect(actionOpen, &actionOpen::triggered, fileOpen)
Qt Designerで作成された「actionOpen」というオブジェクトがあり、トリガーされたという信号があり、main.cpp内のメインのすぐ下に「fileOpen」と呼ばれる関数が定義されています。これは適切な構文に従っているように見えますが、多くのエラーがスローされます。
また、Qt Creator で [ビルド] を繰り返しクリックすると、コードに触れることなく、さまざまな数のエラーが表示され、消えたり、再表示されたりします。この IDE は一種の POS だと思い始めています。
編集:
これが私のファイルです。多分これはいくらか助けになるでしょう。
メインウィンドウ.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
public slots:
void fileOpen();
private:
Ui::MainWindow *ui;
};
#endif // MAINWINDOW_H
main.cpp
#include "mainwindow.h"
#include <QApplication>
#include <iostream>
#include <fstream>
using namespace std;
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MainWindow w;
w.show();
return a.exec();
}
メインウィンドウ.cpp
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <iostream>
using namespace std;
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
QObject::connect(ui->actionOpen, &QAction::triggered, &MainWindow::fileOpen);
ui->setupUi(this);
}
MainWindow::~MainWindow()
{
delete ui;
}
void fileOpen()
{
/*
QString fileName = QFileDialog::getOpenFileName(this, tr("Open File"), QString(),
tr("Text Files (*.txt);;C++ Files (*.cpp *.h)"));
if (!fileName.isEmpty()) {
QFile file(fileName);
if (!file.open(QIODevice::ReadOnly)) {
QMessageBox::critical(this, tr("Error"), tr("Could not open file"));
return;
}
QTextStream in(&file);
ui->textEdit->setText(in.readAll());
file.close();
}
*/
cout << "Hello!";
}