Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: QTabWidget Вопрос 2
Форум на CrossPlatform.RU > Библиотеки > Qt > Qt GUI
edwardoid
Опять проблема с QTabWidget. Мне нужно, чтобы класс главного окна понимал когда я выбрал один из таб из QTabWidget.
Т.е.
если 3 вкладки и я сейчас работаю в первой вкладке, то выбрав вторую вкладку мне надо чтобы шел сигнал и я мог его обработать.

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

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

...

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

}


в итоге вроде при выборе новой вкладки, переменная текущей вкладки, должна измениться, не так ли?
Litkevich Yuriy
QWidget * QTabWidget::currentWidget () const

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

тогда видеть будешь, что происходит
ViGOur
Если быть точнее, то нужно сделать так:
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
вообще я в функции connect всегда указываю тип параметра сигнала, но, возможно, это не обязательно
edwardoid
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() выполняется не для текущей страницы?
Litkevich Yuriy
Цитата(' date='3.5.2008, 21:14) *
выполняется не для текущей страницы?

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

я так понимаю, с предыдущим вопросм все решилось?
edwardoid
В конструкторе по дефолту делаю currentPage - 0-ую вкладку, именно с с ней и происходит selectAll().
С предыдущим вопросом да, все ок.
Litkevich Yuriy
вобщем выкладывай код, хотябы соращенный вариант, но повторяющий твою проблему.
edwardoid
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.
rich
Есть у табВиджета сигнал:currentChanged(int).не подойдет?в твоем случае сделать
switch()
case на каждую вкладку.или тебе что то экзотическое нужно?
edwardoid
Цитата(rich @ 4.5.2008, 11:31) *
Есть у табВиджета сигнал:currentChanged(int).не подойдет?в твоем случае сделать
switch()
case на каждую вкладку.или тебе что то экзотическое нужно?

Не вариант, ибо количество вкладок у меня динамически изменяется...
edwardoid
Еще вопрос, как вызвать resize() для всех вкладок,как только вызовется resize для самого QTabWidget
ViGOur
А зачем тебе ресайзить те вкладки, которые не используются, может лучше проверять соответствие размеров по событию выбора вкладки?
Иначе ИМХО пустая трата ресурсов!
Litkevich Yuriy
изменять размер должен компоновщик, подозреваю что ты его неиспользушь, или я тебя непонял.
edwardoid
Цитата(ViGOur @ 4.5.2008, 17:01) *
А зачем тебе ресайзить те вкладки, которые не используются, может лучше проверять соответствие размеров по событию выбора вкладки?
Иначе ИМХО пустая трата ресурсов!

хм..
как?
Когда вкладка изменилась, тут же ресажзить содержание вкладки?
ViGOur
Цитата(Litkevich Yuriy @ 4.5.2008, 16:04) *
изменять размер должен компоновщик, подозреваю что ты его неиспользушь, или я тебя непонял.
Как вариант, но он тоже я думаю по такому же принципу работает: "если меня не видно, ничего делать не буду". :)
Litkevich Yuriy
это-то и хорошо :)
edwardoid
одним вопросом меньше. работает превосходно... есть еще вопросы правда уже оффтопные))
Litkevich Yuriy
Цитата(edwardoid @ 4.5.2008, 20:00) *
есть еще вопросы правда уже оффтопные))

новая тема и вперед :)
edwardoid
да кстати, как можно добавить копочку в уголок вкладки. Заметьте, не в тело вкладки, а за корешок, где имя...
как в Файрфоксе?
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Форум IP.Board © 2001-2024 IPS, Inc.