0

私はプロジェクトを開発していて、最初はGUIなしでプロジェクトを作成し始めましたが、現在はQtに移植していますが、問題があります。

別のファイルに「古い」実装があり、QTextBrowserに出力するために、そこからMainWindowウィジェットにアクセスしようとしましたが、アクセスできません。

mainwindow.cppに私はこれを持っています:

void MainWindow::addString(char* text)  
     {  
     std::string input = text;  
     ui->textBrowser->append(QString::fromStdString(input));  
     return;  
     }  

mainwindow.h:

class MainWindow : public QMainWindow  
     {
     Q_OBJECT
     public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();
    private slots:
    void on_showWelcome_triggered();
    void on_showArithmetic_triggered();
    private:
    Ui::MainWindow *ui;
    public slots:
    void btnResolveClicked();
    void btnClearClicked();
    void hideAll();
    void addString(char* output);
    };
    #endif // MAINWINDOW_H

そしてsimple_mode.cppで:

void test()  
     {
     MainWindow *gui = new MainWindow;
     gui->addString("WORKS");
     MainWindow:: = gui;  
     }

ただし、これは必要なテキストブラウザに「WORKS」を追加しません。メインウィンドウと同じではないテキストブラウザの別のインスタンスに追加すると思います。

編集:私がやりたかったのは、simple_mode.cppからtextbrowserに直接テキスト行を追加することでした。ちなみに、simple_modeはQtの助けを借りずに書かれたので、std文字列を使用しました。現在、textbrowserウィジェットは仮想端末の出力画面として機能し、以前のようにprintfを使用する代わりに、textbrowserに行を追加したいと思いました。 。しかし、私はすでに自分の道を見つけました、私は今これを必要としません。

助けが必要だった

4

1 に答える 1

1

何を達成したいのかを伝えるのは本当に難しく、コードの断片は考えられるすべてのエラー領域をカバーしていません (つまり、MainWindowコンストラクターの定義はどこですか?)。また、書式設定がひどいです - idents と一貫したブレース スタイルを使用してください。

私のアドバイスは、単に電話showをかけることMainWindowです。uiコンストラクターで初期化を台無しにしない限りMainWindow、このスニペットで十分です。そうでない場合は、不足しているコードを提供してください。

void test()  
{
    MainWindow *gui = new MainWindow;
    gui->addString("WORKS");
    gui->show();
}

補足として、addStringメソッドは次のようになります。

void MainWindow::addString(char* text)
{
    ui->textBrowser->append(QString::fromAscii(text));
}

return ステートメントはまったく不要であり、への割り当ては不要なメモリ割り当てを引き起こす可能性がありますtextstd::stringこれで世界の終わりというわけではありませんが、C++ プログラマーにとって本当に悪い習慣です。

于 2011-06-15T01:49:46.903 に答える