簡體   English   中英

通過引用共享對象(在Qt中)

[英]Sharing object by reference (in Qt)

我想在一個QWizard的多個頁面之間共享一個對象(一個QDir),以便如果一個頁面更改了該目錄的值,則該對象會傳遞到所有其他頁面。n由於該對象不是可選的,因此我想共享它通過傳遞引用而不是指針來實現,因此我不必擔心可能存在的空指針(這是正確的嗎?我已經閱讀了兩種方式的觀點)。 這是一個最小的測試用例:

test.hpp:

#include <QApplication>
#include <QWizard>
#include <QDir>
#include <QVBoxLayout>
#include <QWizardPage>
#include <QLineEdit>

class TestWizard : public QWizard {
    Q_OBJECT
public:
    TestWizard(QWidget* parent = 0);
    QDir directory;
};

class TestPage : public QWizardPage {
    Q_OBJECT

public:
    TestPage(QDir& _directory, int _id, QWidget* parent = 0);
    void initializePage();

public slots:
    void setDirectory(QString new_dir);

private:
    QVBoxLayout* layout;
    QDir directory;
    QLineEdit* dir_edit;
    int id;

};

test.cpp:

#include "test.hpp"
#include <iostream>

TestWizard::TestWizard(QWidget* parent) : QWizard(parent){
    directory = QDir();
    addPage(new TestPage(directory, 0));
    addPage(new TestPage(directory, 1));
    addPage(new TestPage(directory, 2));
}
TestPage::TestPage(QDir& _directory, int _id, QWidget* parent)
    : QWizardPage(parent){

    directory = _directory;
    id = _id;

    layout = new QVBoxLayout;
    dir_edit = new QLineEdit;
    layout->addWidget(dir_edit);
    this->setLayout(layout);
    connect(dir_edit, SIGNAL(textChanged(QString)),
        this, SLOT(setDirectory(QString)));
}
void TestPage::initializePage(){
    std::cout << id << ": " << directory.absolutePath().toUtf8().constData()
              << std::endl;
}
void TestPage::setDirectory(QString new_dir){
    directory.setPath(new_dir);
}
int main(int argc, char* argv[]){
    QApplication app(argc, argv);
    TestWizard wizard;
    wizard.show();
    return app.exec();
}

單擊此按鈕並編輯文本會導致更改一個文本僅影響一頁上的directory變量的結果。 我知道如何使用指針執行此操作,但是我想了解為什么這不起作用。

看來我對這個背后的原因有一個基本的誤解,我想在做一些愚蠢的事情之前先清除它:)

我想我有點白痴,但是只是為了確認一下:

test.cpp:

TestPage::TestPage(QDir& _directory, int _id, QWidget* parent)
    : QWizardPage(parent){

    directory = _directory; // This is where I'm going wrong
...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM