crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

4 страниц V   1 2 3 > »   
Ответить в данную темуНачать новую тему
> Работа с QTabWidget, взаимодействие между классами.
RazrFalcon
  опции профиля:
сообщение 5.4.2011, 14:46
Сообщение #1


Zombie Mod
*****

Группа: Участник
Сообщений: 1654
Регистрация: 24.5.2010
Из: Харьков
Пользователь №: 1752

Спасибо сказали: 64 раз(а)




Репутация:   212  


Как я понял работу:
создаем на форму QTabWidget;
затем создаем классы, наследники QWidget;
в этих классам создаем нужные нам элементы GUI;
в класс нашего главного окна добавляем что то в духе:
tabWidget = new QTabWidget;
tabWidget->addTab(new newTab(), tr("Tab"));
.
В итоге получаем по классу для каждого таба. Как я понял.

Проблема в том, что я не пойму, как теперь обратится к главному окну из класса-таба.
К примеру мне нужно изменить ячейку в таблице (2-й таб), а ввожу я в первом табе.
Ну или банально изменить размер окна из таба. Ведь setGeometgy вызваный из первого таба не повлияет на главное окно.

PS: табы только для примера, текущего, проблема больше в взаимосвязями с классами.


Пример:
есть 2-а класса. Главный: WallWindow, и класс таба: ListTab.
Что бы что то изменить в табе ListTab из WallWindow, я делаю следующие:
void WallWindow::something()
{
    //...
    ListTab my;
    my.startButton->setText("Start");
    //...
}
Это правильно?

Сообщение отредактировал RazrFalcon - 5.4.2011, 15:55
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Алексей1153
  опции профиля:
сообщение 5.4.2011, 16:57
Сообщение #2


фрилансер
******

Группа: Участник
Сообщений: 2847
Регистрация: 19.6.2010
Из: Обливион
Пользователь №: 1822

Спасибо сказали: 211 раз(а)




Репутация:   34  


1) можно произвести свой класс от вкладки и там сохранять указатель на родителя нужного класса
tabWidget->addTab(new newTab(tabWidget), tr("Tab"));Language: cpp

2) сигналы и слоты
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
RazrFalcon
  опции профиля:
сообщение 5.4.2011, 17:29
Сообщение #3


Zombie Mod
*****

Группа: Участник
Сообщений: 1654
Регистрация: 24.5.2010
Из: Харьков
Пользователь №: 1752

Спасибо сказали: 64 раз(а)




Репутация:   212  


1) не понял
2) как тогда изменить иконку главного окна кнопкой находящейся в табе?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Алексей1153
  опции профиля:
сообщение 5.4.2011, 18:16
Сообщение #4


фрилансер
******

Группа: Участник
Сообщений: 2847
Регистрация: 19.6.2010
Из: Обливион
Пользователь №: 1822

Спасибо сказали: 211 раз(а)




Репутация:   34  


1) произвести класс-вкладку от QWidget, в конструкторе принять указатель на QTabWidget-родитель. Когда нужно, просто вызываешь нужный метод по указателю

2) а как это обычно делается ? Также, только в слоте, а слот соединён с сигналом кнопки
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
RazrFalcon
  опции профиля:
сообщение 5.4.2011, 19:57
Сообщение #5


Zombie Mod
*****

Группа: Участник
Сообщений: 1654
Регистрация: 24.5.2010
Из: Харьков
Пользователь №: 1752

Спасибо сказали: 64 раз(а)




Репутация:   212  


А можно с примером кода. Так как я все равно не понял.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Алексей1153
  опции профиля:
сообщение 5.4.2011, 20:03
Сообщение #6


фрилансер
******

Группа: Участник
Сообщений: 2847
Регистрация: 19.6.2010
Из: Обливион
Пользователь №: 1822

Спасибо сказали: 211 раз(а)




Репутация:   34  


нет, пример сейчас я писать не в состоянии. А первый пункт - это классика C++ , в любом учебнике но нему есть
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
RazrFalcon
  опции профиля:
сообщение 11.4.2011, 13:22
Сообщение #7


Zombie Mod
*****

Группа: Участник
Сообщений: 1654
Регистрация: 24.5.2010
Из: Харьков
Пользователь №: 1752

Спасибо сказали: 64 раз(а)




Репутация:   212  


Спрошу еще раз, у всех.
Как вызвать функцию, которая определена в другом классе?

Пример:
.h
Раскрывающийся текст
class ListTab : public QWidget
{
    Q_OBJECT

public:
    ListTab(QWidget *parent = 0);

public slots:
    QFileInfoList load_and_show();
};

class settingTab : public QWidget
{
    Q_OBJECT

public:
    settingTab(QWidget *parent = 0);
private slots:
    void on_addFolderButton_clicked();
};


Мне нужно вызвать load_and_show(); в void settingTab::on_addFolderButton_clicked(){}. Как?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
wiz29
  опции профиля:
сообщение 11.4.2011, 13:38
Сообщение #8


Старейший участник
****

Группа: Участник
Сообщений: 600
Регистрация: 7.7.2010
Из: Санкт-Петербург
Пользователь №: 1866

Спасибо сказали: 94 раз(а)




Репутация:   12  


Цитата(RazrFalcon @ 11.4.2011, 14:22) *
Мне нужно вызвать load_and_show(); в void settingTab::on_addFolderButton_clicked(){}. Как?

Для этого нужно иметь экземпляр класса ListTab в settingTab и вызвать соответствующий метод экземпляра класса (ListTab::on_addFolderButton_clicked).

но на самом деле вопрос поставлен не вполне корректно.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
RazrFalcon
  опции профиля:
сообщение 11.4.2011, 13:39
Сообщение #9


Zombie Mod
*****

Группа: Участник
Сообщений: 1654
Регистрация: 24.5.2010
Из: Харьков
Пользователь №: 1752

Спасибо сказали: 64 раз(а)




Репутация:   212  


А пример можно? Я ничего не понял.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
wiz29
  опции профиля:
сообщение 11.4.2011, 13:46
Сообщение #10


Старейший участник
****

Группа: Участник
Сообщений: 600
Регистрация: 7.7.2010
Из: Санкт-Петербург
Пользователь №: 1866

Спасибо сказали: 94 раз(а)




Репутация:   12  


тут нужно четко понимать что ты хочешь сделать. и не путать класс с экземпляром класса... Если QFileInfoList load_and_show() имеет статическую природу, тогда объяви эту функцию как статическую, если же данная функция имеет не статическую природу , тогда, в любом случае, придется иметь экземпляр одного класса в описании другого и с этим ничего не поделать.

Цитата(RazrFalcon @ 11.4.2011, 14:39) *
А пример можно? Я ничего не понял.

Для того куска кода который приведен выше , это будет выглядеть так:
class ListTab : public QWidget
{
    Q_OBJECT

public:
    ListTab(QWidget *parent = 0);

public slots:
    QFileInfoList load_and_show();
};

class settingTab : public QWidget
{
    Q_OBJECT

public:
    settingTab(QWidget *parent = 0);
private slots:
    void on_addFolderButton_clicked()
    {
         if (m_pListTab)
         {
              m_pListTab->load_and_show();
         }
    }
private:

    ListTab* m_pListTab;
};

Детали инициализации я здесь пропущу.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

4 страниц V   1 2 3 > » 
Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 14.12.2018, 11:44