crossplatform.ru

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

edwardoid
  опции профиля:
сообщение 3.5.2008, 15:45
Сообщение #1


Участник
**

Группа: Участник
Сообщений: 171
Регистрация: 1.5.2008
Из: Ереван, Армения
Пользователь №: 164

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




Репутация:   0  


Опять проблема с QTabWidget. Мне нужно, чтобы класс главного окна понимал когда я выбрал один из таб из QTabWidget.
Т.е.
если 3 вкладки и я сейчас работаю в первой вкладке, то выбрав вторую вкладку мне надо чтобы шел сигнал и я мог его обработать.

Что тут неправильно:

connect(tabs,SIGNAL(currentChanged()),this,SLOT(setCurrent())); // tabs - QTabWidget 

...

void MainWindow::setCurrent()
{
     currentPage=tabs->currentWidget(); // curentPage - переменная для хранения текущей страницы.

}


в итоге вроде при выборе новой вкладки, переменная текущей вкладки, должна измениться, не так ли?
Причина редактирования: используйте тэг code (есть кнопочка)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
3 страниц V   1 2 3 >  
Начать новую тему
Ответов (1 - 21)
Litkevich Yuriy
  опции профиля:
сообщение 3.5.2008, 15:59
Сообщение #2


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

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




Репутация:   94  


QWidget * QTabWidget::currentWidget () const

т.е.
currentPage должно быть типа QWidget *
у тебя так?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
edwardoid
  опции профиля:
сообщение 3.5.2008, 16:03
Сообщение #3


Участник
**

Группа: Участник
Сообщений: 171
Регистрация: 1.5.2008
Из: Ереван, Армения
Пользователь №: 164

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




Репутация:   0  


Да так. проблема не в том.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 3.5.2008, 16:17
Сообщение #4


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

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




Репутация:   94  


проверь в слот заходит?
диалог сообщения какой нибудь в начало слота воткни.
и к стати доработай слот так:
setCurrent( int index)
{
    // Для тестирования слота
    QMessageBox::information(this, tr("Слот"), tr("Текущая индекс: ")+QString::number(index),    QMessageBox::Ok);
....
}

тогда видеть будешь, что происходит
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
ViGOur
  опции профиля:
сообщение 3.5.2008, 16:39
Сообщение #5


Мастер
******

Группа: Модератор
Сообщений: 3296
Регистрация: 9.10.2007
Из: Москва
Пользователь №: 4

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




Репутация:   40  


Если быть точнее, то нужно сделать так:
connect(tabs,SIGNAL(currentChanged( int)),this,SLOT(setCurrent( int))); // tabs - QTabWidget 

...

void MainWindow::setCurrent( int nIndex)
{
     // currentPage=tabs->currentWidget(); // curentPage - переменная для хранения текущей страницы.
     // Для тестирования слота
    QMessageBox::information(this, tr("Слот"), tr("Текущий индекс: ")+QString::number( nIndex),    QMessageBox::Ok);
}
Где nIndex, номер выбранной тобой вкладки.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 3.5.2008, 16:48
Сообщение #6


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

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




Репутация:   94  


вообще я в функции connect всегда указываю тип параметра сигнала, но, возможно, это не обязательно
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
edwardoid
  опции профиля:
сообщение 3.5.2008, 17:14
Сообщение #7


Участник
**

Группа: Участник
Сообщений: 171
Регистрация: 1.5.2008
Из: Ереван, Армения
Пользователь №: 164

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




Репутация:   0  


connect(tabs,SIGNAL(currentChanged(int)),this,SLOT(setCurrent(int)));
connect(action_Select_all,SIGNAL(triggered()),currentPage->edit,SLOT(selectAll()));

...

void Prog::setCurrent(int nIndex)
{
    currentPage=qobject_cast<Page*>(tabs->widget(nIndex));
}



Page - класс содержания вкладок, там есть QTextEdit *edit

Почему когда action_Select_all посылает сигнал triggered(), операция selectAll() выполняется не для текущей страницы?
Причина редактирования: используйте тэг code (есть кнопочка)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 3.5.2008, 17:23
Сообщение #8


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

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




Репутация:   94  


Цитата(' date='3.5.2008, 21:14) *
выполняется не для текущей страницы?

а для какой, закономерность есть?

я так понимаю, с предыдущим вопросм все решилось?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
edwardoid
  опции профиля:
сообщение 3.5.2008, 17:30
Сообщение #9


Участник
**

Группа: Участник
Сообщений: 171
Регистрация: 1.5.2008
Из: Ереван, Армения
Пользователь №: 164

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




Репутация:   0  


В конструкторе по дефолту делаю currentPage - 0-ую вкладку, именно с с ней и происходит selectAll().
С предыдущим вопросом да, все ок.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 3.5.2008, 17:55
Сообщение #10


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

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




Репутация:   94  


вобщем выкладывай код, хотябы соращенный вариант, но повторяющий твою проблему.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
edwardoid
  опции профиля:
сообщение 3.5.2008, 19:32
Сообщение #11


Участник
**

Группа: Участник
Сообщений: 171
Регистрация: 1.5.2008
Из: Ереван, Армения
Пользователь №: 164

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




Репутация:   0  


CODE
class MWindow: public QMainWindow, public MainWindow
{
...
Public:
Page *currentPage;
public slots:
void setCurrent();
....
};

MWindow::MWindow(QWidget *parent): QMainWindow(parent)
{
...
connect(tabs,SIGNAL(currentChanged(int)), this, SLOT(setCurrent(int)));
connect(action_Select_all,SIGNAL(triggered()),currentPage->Source,SLOT(selectAll()));
...
}

void MWindow::setCurrent(int nIndex)
{
currentPage=tab->widget(nIndex);
}


Source = элемент типа QTextEdit.

Сообщение отредактировал edwardoid - 3.5.2008, 19:46
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
rich
  опции профиля:
сообщение 4.5.2008, 9:31
Сообщение #12


Участник
**

Группа: Участник
Сообщений: 123
Регистрация: 1.3.2008
Пользователь №: 109

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




Репутация:   0  


Есть у табВиджета сигнал:currentChanged(int).не подойдет?в твоем случае сделать
switch()
case на каждую вкладку.или тебе что то экзотическое нужно?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
edwardoid
  опции профиля:
сообщение 4.5.2008, 13:23
Сообщение #13


Участник
**

Группа: Участник
Сообщений: 171
Регистрация: 1.5.2008
Из: Ереван, Армения
Пользователь №: 164

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




Репутация:   0  


Цитата(rich @ 4.5.2008, 11:31) *
Есть у табВиджета сигнал:currentChanged(int).не подойдет?в твоем случае сделать
switch()
case на каждую вкладку.или тебе что то экзотическое нужно?

Не вариант, ибо количество вкладок у меня динамически изменяется...
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
edwardoid
  опции профиля:
сообщение 4.5.2008, 14:50
Сообщение #14


Участник
**

Группа: Участник
Сообщений: 171
Регистрация: 1.5.2008
Из: Ереван, Армения
Пользователь №: 164

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




Репутация:   0  


Еще вопрос, как вызвать resize() для всех вкладок,как только вызовется resize для самого QTabWidget
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
ViGOur
  опции профиля:
сообщение 4.5.2008, 15:01
Сообщение #15


Мастер
******

Группа: Модератор
Сообщений: 3296
Регистрация: 9.10.2007
Из: Москва
Пользователь №: 4

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




Репутация:   40  


А зачем тебе ресайзить те вкладки, которые не используются, может лучше проверять соответствие размеров по событию выбора вкладки?
Иначе ИМХО пустая трата ресурсов!
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 4.5.2008, 15:04
Сообщение #16


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

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




Репутация:   94  


изменять размер должен компоновщик, подозреваю что ты его неиспользушь, или я тебя непонял.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
edwardoid
  опции профиля:
сообщение 4.5.2008, 15:08
Сообщение #17


Участник
**

Группа: Участник
Сообщений: 171
Регистрация: 1.5.2008
Из: Ереван, Армения
Пользователь №: 164

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




Репутация:   0  


Цитата(ViGOur @ 4.5.2008, 17:01) *
А зачем тебе ресайзить те вкладки, которые не используются, может лучше проверять соответствие размеров по событию выбора вкладки?
Иначе ИМХО пустая трата ресурсов!

хм..
как?
Когда вкладка изменилась, тут же ресажзить содержание вкладки?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
ViGOur
  опции профиля:
сообщение 4.5.2008, 15:39
Сообщение #18


Мастер
******

Группа: Модератор
Сообщений: 3296
Регистрация: 9.10.2007
Из: Москва
Пользователь №: 4

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




Репутация:   40  


Цитата(Litkevich Yuriy @ 4.5.2008, 16:04) *
изменять размер должен компоновщик, подозреваю что ты его неиспользушь, или я тебя непонял.
Как вариант, но он тоже я думаю по такому же принципу работает: "если меня не видно, ничего делать не буду". :)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 4.5.2008, 15:45
Сообщение #19


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

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




Репутация:   94  


это-то и хорошо :)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
edwardoid
  опции профиля:
сообщение 4.5.2008, 16:00
Сообщение #20


Участник
**

Группа: Участник
Сообщений: 171
Регистрация: 1.5.2008
Из: Ереван, Армения
Пользователь №: 164

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




Репутация:   0  


одним вопросом меньше. работает превосходно... есть еще вопросы правда уже оффтопные))
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 4.5.2008, 16:02
Сообщение #21


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

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




Репутация:   94  


Цитата(edwardoid @ 4.5.2008, 20:00) *
есть еще вопросы правда уже оффтопные))

новая тема и вперед :)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
edwardoid
  опции профиля:
сообщение 4.5.2008, 16:25
Сообщение #22


Участник
**

Группа: Участник
Сообщений: 171
Регистрация: 1.5.2008
Из: Ереван, Армения
Пользователь №: 164

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




Репутация:   0  


да кстати, как можно добавить копочку в уголок вкладки. Заметьте, не в тело вкладки, а за корешок, где имя...
как в Файрфоксе?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

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


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


RSS Рейтинг@Mail.ru Текстовая версия Сейчас: 4.6.2025, 22:43