Russian Qt Forum

Qt => Вопросы новичков => Тема начата: Shu-Shu от Апрель 30, 2011, 03:27



Название: Получить доступ к элементам формы
Отправлено: Shu-Shu от Апрель 30, 2011, 03:27
Как получить доступ к компонентам формы из обычной функции? Просто так, понятное дело, доступ к виджетам не получить. Если через неймспейс, то пишет что-то типа "invalid use of non-static data member..." Я уже голову сломал, хотя решение скорее всего очевидное...


Название: Re: Получить доступ к элементам формы
Отправлено: RoulanD от Апрель 30, 2011, 05:24
Тебе нужно получить доступ к виджетам которые ты на форме создал? Если да то через ui.
Код
C++ (Qt)
ui->textEdit->....
 


Название: Re: Получить доступ к элементам формы
Отправлено: Shu-Shu от Апрель 30, 2011, 17:16
"ui was not declared in this scope"

static unsigned __stdcall ThreadFunc1(void*) {
    WaitForSingleObject(hMutex,INFINITE);
    while(file.get(c))
        textEdit->append((QString)c); //ругается вот на это
    ReleaseMutex(hMutex);
    return(0);
}

это функция потока и очень желательно изменять textEdit именно в ней...
использую для гуи множественное наследование, если это как-то может помочь


Название: Re: Получить доступ к элементам формы
Отправлено: Fat-Zer от Апрель 30, 2011, 17:31
а про инкапсуляцию вам мама в детстве ничего не рассказывала?

и с интерфейсом можно общаться только из главного потока...


Название: Re: Получить доступ к элементам формы
Отправлено: Shu-Shu от Апрель 30, 2011, 19:30
а про инкапсуляцию вам мама в детстве ничего не рассказывала?

и с интерфейсом можно общаться только из главного потока...

Все данные и методы класса открыты.
Впрочем уже неважно, проблема решилась:

static unsigned __stdcall ThreadFunc1(void* w) {
    WaitForSingleObject(hMutex,INFINITE);
    while(file.get(c))
        ((Lab*)w)->textEdit->append((QString)c);
    ReleaseMutex(hMutex);
    return(0);
}

где Lab - класс гуи

всем спасибо за внимание


Название: Re: Получить доступ к элементам формы
Отправлено: lit-uriy от Апрель 30, 2011, 21:17
какой-то насорог_с_бульдогом получился.