Как бы вы получили доступ к виджету из функции в другом файле в Qt? - PullRequest
0 голосов
/ 15 июня 2011

Я разрабатываю проект, и я сначала начал делать его без графического интерфейса, но теперь я портирую его на Qt, но у меня есть проблема.

У меня есть "старая" реализация в отдельном файле, и я пытаюсь получить из него виджет MainWindow, чтобы вывести его в QTextBrowser, но я не могу этого сделать.

В 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;  
     }

Однако это не добавляет «РАБОТЫ» к текстовому браузеру, что мне и нужно, я думаю, это добавляет его к другому экземпляру текстового браузера, который не совпадает с главным окном.

EDIT: Я хотел добавить строку текста непосредственно из simple_mode.cpp в браузер текста. Кстати, simple_mode был написан без помощи Qt, поэтому я использовал строки std, и в настоящее время виджет textbrowser действует как экран вывода виртуального терминала, и вместо использования printf, как я делал раньше, я хотел добавить строки в textbrowser , Однако я уже нашел свой путь, мне это сейчас не нужно.

Мне нужна помощь

1 Ответ

1 голос
/ 15 июня 2011

Действительно сложно сказать, чего вы хотите достичь, и фрагменты кода не охватывают все возможные ошибочные области (т. Е. Где определение конструктора MainWindow?).Кроме того, форматирование ужасно - пожалуйста, используйте идентификаторы и последовательный стиль крепления.

Мой совет - просто позвоните 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));
}

Оператор возврата полностьюненужный, и присвоение text для std::string может вызвать ненужное выделение памяти.Это не так, как будто это конец света, но это действительно очень плохая практика для программиста на C ++.

...