Полная версия этой страницы:
QTabWidget Вопрос 2
edwardoid
3.5.2008, 15:45
Опять проблема с QTabWidget. Мне нужно, чтобы класс главного окна понимал когда я выбрал один из таб из QTabWidget.
Т.е.
если 3 вкладки и я сейчас работаю в первой вкладке, то выбрав вторую вкладку мне надо чтобы шел сигнал и я мог его обработать.
Что тут неправильно:
connect(tabs,SIGNAL(currentChanged()),this,SLOT(setCurrent())); // tabs - QTabWidget
...
void MainWindow::setCurrent()
{
currentPage=tabs->currentWidget(); // curentPage - переменная для хранения текущей страницы.
}
в итоге вроде при выборе новой вкладки, переменная текущей вкладки, должна измениться, не так ли?
Litkevich Yuriy
3.5.2008, 15:59
QWidget * QTabWidget::currentWidget () const
т.е.
currentPage должно быть типа
QWidget *у тебя так?
edwardoid
3.5.2008, 16:03
Да так. проблема не в том.
Litkevich Yuriy
3.5.2008, 16:17
проверь в слот заходит?
диалог сообщения какой нибудь в начало слота воткни.
и к стати доработай слот так:
setCurrent( int index)
{
// Для тестирования слота
QMessageBox::information(this, tr("Слот"), tr("Текущая индекс: ")+QString::number(index), QMessageBox::Ok);
....
}
тогда видеть будешь, что происходит
Если быть точнее, то нужно сделать так:
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
вообще я в функции connect всегда указываю тип параметра сигнала, но, возможно, это не обязательно
edwardoid
3.5.2008, 17:14
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
3.5.2008, 17:23
Цитата(' date='3.5.2008, 21:14)
выполняется не для текущей страницы?
а для какой, закономерность есть?
я так понимаю, с предыдущим вопросм все решилось?
edwardoid
3.5.2008, 17:30
В конструкторе по дефолту делаю currentPage - 0-ую вкладку, именно с с ней и происходит selectAll().
С предыдущим вопросом да, все ок.
Litkevich Yuriy
3.5.2008, 17:55
вобщем выкладывай код, хотябы соращенный вариант, но повторяющий твою проблему.
edwardoid
3.5.2008, 19:32
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.
Есть у табВиджета сигнал:currentChanged(int).не подойдет?в твоем случае сделать
switch()
case на каждую вкладку.или тебе что то экзотическое нужно?
edwardoid
4.5.2008, 13:23
Цитата(rich @ 4.5.2008, 11:31)
Есть у табВиджета сигнал:currentChanged(int).не подойдет?в твоем случае сделать
switch()
case на каждую вкладку.или тебе что то экзотическое нужно?
Не вариант, ибо количество вкладок у меня динамически изменяется...
edwardoid
4.5.2008, 14:50
Еще вопрос, как вызвать resize() для всех вкладок,как только вызовется resize для самого QTabWidget
А зачем тебе ресайзить те вкладки, которые не используются, может лучше проверять соответствие размеров по событию выбора вкладки?
Иначе ИМХО пустая трата ресурсов!
Litkevich Yuriy
4.5.2008, 15:04
изменять размер должен компоновщик, подозреваю что ты его неиспользушь, или я тебя непонял.
edwardoid
4.5.2008, 15:08
Цитата(ViGOur @ 4.5.2008, 17:01)
А зачем тебе ресайзить те вкладки, которые не используются, может лучше проверять соответствие размеров по событию выбора вкладки?
Иначе ИМХО пустая трата ресурсов!
хм..
как?
Когда вкладка изменилась, тут же ресажзить содержание вкладки?
Цитата(Litkevich Yuriy @ 4.5.2008, 16:04)
изменять размер должен компоновщик, подозреваю что ты его неиспользушь, или я тебя непонял.
Как вариант, но он тоже я думаю по такому же принципу работает: "если меня не видно, ничего делать не буду".
Litkevich Yuriy
4.5.2008, 15:45
это-то и хорошо
edwardoid
4.5.2008, 16:00
одним вопросом меньше. работает превосходно... есть еще вопросы правда уже оффтопные))
Litkevich Yuriy
4.5.2008, 16:02
Цитата(edwardoid @ 4.5.2008, 20:00)
есть еще вопросы правда уже оффтопные))
новая тема и вперед
edwardoid
4.5.2008, 16:25
да кстати, как можно добавить копочку в уголок вкладки. Заметьте, не в тело вкладки, а за корешок, где имя...
как в Файрфоксе?
Для просмотра полной версии этой страницы, пожалуйста,
пройдите по ссылке.