質問

私はQT v5.1.1に新しく含まれているQtserialportを利用しようとしていますが、経験がほとんどないことをコンパイルしようとすると、いくつかの問題に遭遇しています。私の検索から、QT 5.1のQTSERIALPORTが構築されていて使用する準備ができていないようです。これは正しいですか? QT CreatorまたはVisual Studio 2010のいずれかを使用して準備するにはどうすればよいですか?私は最近4.8.4からアップグレードし、プロジェクトを継承したので、すべてが以前に何が行われたのかわかりません。さまざまなLinuxバージョンをコンパイルするための手順を見つけましたが、Windowsのためのものは一貫していないと思われるものは何もないので、ここに誰かがもっと具体的な指示があることを望んでいました。

ありがとう!

編集:私が取得している特定のエラーを1つまたは2つ追加します。おそらく、私が間違っていることを特定するのに役立つかもしれません。

error LNK2001: unresolved external symbol "public: virtual struct QMetaObject const * __thiscall QSerialPort::metaObject(void)const " (?metaObject@QSerialPort@@UBEPBUQMetaObject@@XZ)
error LNK2019: unresolved external symbol "__declspec(dllimport) public: __thiscall QSerialPort::QSerialPort(class QObject *)" (__imp_??0QSerialPort@@QAE@PAVQObject@@@Z) referenced in function "public: __thiscall serial_client::serial_client(class QObject *)" (??0serial_client@@QAE@PAVQObject@@@Z)

これらは、コンパイル時間に表示される21のエラーのうち2つにすぎません。コメントで述べたように、Visual Studio 2010もQTの作成者も、QTSerialPortライブラリを認識しているようには見えません。

役に立ちましたか?

解決

さて、さまざまなものを試して、さまざまな場所からの情報を組み合わせた後、私はすべてを把握して働いていることができました。

もちろん、それが機能しなかった理由は単純でした。モジュールはQT5プラグインからVisual Studioに含まれていませんでした。これは、利用可能なモジュールとして表示されなかったという簡単な理由でした。追加の問題は、ソース依存関係をインストールしてQT 5.1.1をインストールしていなかったことです。QTSerialPortが必要なものは含まれていないデフォルトのインストールを選択しました。再インストール後、次の場所でVSプロジェクトの設定を変更しました。

  1. プロジェクトプロパティ - >構成プロパティ - > c/c ++ - >一般 - >追加のディレクトリ、追加の行:$(qtdir) include qtserialport
  2. プロジェクトプロパティ - >構成プロパティ - > c/c ++ - > preprocessor-> preprocessorの定義、追加の行:qt_serialport_lib
  3. プロジェクトプロパティ - >構成プロパティ - >リンカー - >入力 - >追加の依存関係、追加ライン:QT5SerialPort.lib

注:$(qtdir)= c: qt qt5.1.1 5.1.1 msvc2010_opengl

その後、QT5SerialPort.dllとQT5SerialPortd.dllをリリースとデバッグフォルダーにそれぞれ追加しました。

これらが私が行った唯一の変更であると確信しています。これが他の誰かに役立つことを願っています!

他のヒント

LinuxとWindows XP/7で正常に実行されるQSErialPortを使用して、QT5.0.2を使用して小さなプロジェクトを作成しました。 Linuxでコンパイルすることは、すべてのライブラリがすでに配置されているため、かなり手間がかかりませんでした。 Windowsでコンパイルするには、Windows(クロスコンパイルなし)にインストールされたQTCreator(Visual Studioではなく)を使用しました。

最初に、QTCreatorがQSerialPortを見つけることができるかどうかを確認する必要があります。実際、Windowsの下のQTCreatorの下でコンパイルするように実際に機能するはずです。プログラムを展開するには、使用されているすべてのqtlibrariesが導入されていることを確認する必要があります。最も簡単な方法は、プログラムと同じディレクトリに配置することです。私のプログラムでは、これは次のようになります:

  • +プラットフォーム(次の2つのDLLを備えたディレクトリ)

    • -qminimal.dll
    • -qwindows.dll

    • icudt51.dll

    • ICUIN51.dll
    • ICUUC51.dll
    • libegl.dll
    • libglesv2.dll
    • qt5core.dll
    • qt5gui.dll
    • qt5serialport.dll
    • qt5widgets.dll

注意する必要があります 使用済みのDLLはコンパイラに一致します! 32ビット対64ビット 使用済みのコンパイラと一致するだけでなくMingwまたはVisual Studioコンパイラ).

シリアルポートを開くためのコードスニペット:

void MainWindow::openSerialPort() 
{
struct Settings p;

/* Use name of ComPort from Combobox */
p.name = ui->cboComPort->currentText();
p.baudRate = 38400;
p.dataBits = QSerialPort::Data8;
p.parity = QSerialPort::NoParity;
p.stopBits = QSerialPort::OneStop;
p.flowControl = QSerialPort::NoFlowControl;
p.stringBaudRate = "38400";
p.stringDataBits = "8";
p.stringParity = tr("no parity");
p.stringFlowControl = tr("no flow control");
p.stringStopBits = tr("1 stopbit");

serial->setPortName(p.name);
if (serial->open(QIODevice::ReadWrite)) {
    if (serial->setBaudRate(p.baudRate)
            && serial->setDataBits(p.dataBits)
            && serial->setParity(p.parity)
            && serial->setStopBits(p.stopBits)
            && serial->setFlowControl(p.flowControl)) {

        //console->setEnabled(true);
        //console->setLocalEchoEnabled(p.localEchoEnabled);
        ui->actionConnect->setEnabled(false);
        ui->actionDisconnect->setEnabled(true);
        ui->actionConfigure->setEnabled(false);
        ui->statusBar->showMessage(tr("Connected to %1 : %2, %3, %4, %5, %6")
                                   .arg(p.name).arg(p.stringBaudRate).arg(p.stringDataBits)
                                   .arg(p.stringStopBits).arg(p.stringParity).arg(p.stringFlowControl));

    } else {
        serial->close();
        QMessageBox::critical(this, tr("Error"), serial->errorString());

        ui->statusBar->showMessage(tr("Configure error"));
    }
} else {
    QMessageBox::critical(this, tr("Error"), serial->errorString());

    ui->statusBar->showMessage(tr("Open error"));
}
}
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top