Записать текст в блок QTextEdit из функции C - PullRequest
1 голос
/ 16 марта 2012

У меня нет конкретного примера для показа ... но я хочу сделать это из файла на основе C, записать текст из сокета TCP в поле QTextEdit (которое доступно только для чтения).

Я пишу небольшой TCP-клиент, который читает входящие данные с TCP-сервера, который я написал на C для Linux. Сейчас я пытаюсь написать клиент на основе QT GUI, чтобы пользователь мог отправлять / получать текст с сервера. По сути это чат-сервер.

Я не уверен, как писать конкретно в элемент управления QTextEdit непосредственно из файла c. Мой код сокета основан исключительно на C, и я могу заставить QT вызвать функцию, открывающую сокет и т. Д. Сейчас я пытаюсь выяснить, как читать все, что отвечает на сервер.

Пока есть входящие данные, как мне пройти этот буфер обратно через инфраструктуру QT и в элемент управления QTextEdit? Я использую функцию C recv ().

Ответы [ 2 ]

0 голосов
/ 16 марта 2012

Я думаю, вы могли бы написать класс c ++ в другом файле и включить его в свой файл c. Этот класс должен быть примерно таким:

class MySignalClass : public QObject
{
Q_OBJECT
public:
    void send_message(char *x)
    {
         emit message_to_write(x);
    }
signals:

    void message_to_write(char * x);

};
MySignalClass obj;

Вам также необходимо создать слот в классе, где находится ваш QEditBox. После этого, если вы подключите этот сигнал к этому слоту. Слот, который вы создадите, изменит содержимое вашего QEditBox с тем, что вы отправите с сигналом.

Чтобы отправить сигнал, все, что вам нужно сделать, это после того, как вы вызовете recv (), вставьте эту строку

obj.send_message (буфер); // где буфер - это то, что вы получили с помощью recv ().

Я не уверен, что этого достаточно, вы можете еще немного рассмотреть механизм сигналов и слотов Qt здесь

Это скорее решение c ++, я не знаю, как вы могли бы отправить сигнал Qt без класса.

0 голосов
/ 16 марта 2012

QTextEdit имеет API setPlainText, который позволяет изменять отображаемый текст.каким-то образом вам нужно получить доступ к этому API из вашего кода, предоставив объект QTextEdit или некоторую функцию, которая вызывает API setPlainText для QTextEdit.

...