![]() |
Здравствуйте, гость ( Вход | Регистрация )
![]() ![]() |
![]() |
Roland |
![]()
Сообщение
#1
|
Новичок Группа: Новичок Сообщений: 6 Регистрация: 11.10.2011 Пользователь №: 2936 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
Есть главное окно, в какотором расположен Toolbar и TabWidget c двумя вкладками.
На ToolBar я добавил свои Actions(действия) Undo, Redo. В каждой вкладке TabWidget есть QTextEdit. Задача такова: я пишу что-то в первом TextEdit и кнопки Undo и Redo на ToolBar соответственно функционируют для текущего QTextEdit. Перехожу в другую вкладку, кнопки Undo и Redo начинают функционировать уже для другого QTextEdit. Но кнопки функционируют криво. Например: Я написал в первом QTextEdit какой-то текст. Кнопка Undo активировалась. Затем, перешел во второй QTextEdit, кнопка Undo так и осталась активированой. Несколько дней пытаюсь решить эту проблему. То ли баг в сигналах и слотах, то ли... Итак, исходя из документации при переключении вкладок в TabWidget есть сигнал: currentChanged(int); Создаю свой слот для обработки данного сигнала. changeDocument(int); В конструкторе главного окна делаю connect.
И сама реализация слота: void MainWindow::changeDocument(int index) { if(editConnection) { disconnect(pTempEdit,SIGNAL(undoAvailable(bool)),ui->actionUndo,SLOT(setEnabled(bool))); disconnect(ui->actionUndo,SIGNAL(triggered()),pTempEdit,SLOT(undo())); disconnect(pTempEdit,SIGNAL(redoAvailable(bool)),ui->actionRedo,SLOT(setEnabled(bool))); disconnect(ui->actionRedo,SIGNAL(triggered()),pTempEdit,SLOT(redo())); disconnect(pTempEdit,SIGNAL(copyAvailable(bool)),ui->actionCopy,SLOT(setEnabled(bool))); disconnect(ui->actionCopy,SIGNAL(triggered()),pTempEdit,SLOT(copy())); disconnect(pTempEdit,SIGNAL(copyAvailable(bool)),ui->actionCut,SLOT(setEnabled(bool))); disconnect(ui->actionCut,SIGNAL(triggered()),pTempEdit,SLOT(cut())); editConnection = false; } pTempEdit = qobject_cast<QTextEdit*>(ui->tabWidget->currentWidget()); connect(pTempEdit,SIGNAL(undoAvailable(bool)),ui->actionUndo,SLOT(setEnabled(bool))); connect(ui->actionUndo,SIGNAL(triggered()),pTempEdit,SLOT(undo())); connect(pTempEdit,SIGNAL(redoAvailable(bool)),ui->actionRedo,SLOT(setEnabled(bool))); connect(ui->actionRedo,SIGNAL(triggered()),pTempEdit,SLOT(redo())); connect(pTempEdit,SIGNAL(copyAvailable(bool)),ui->actionCopy,SLOT(setEnabled(bool))); connect(ui->actionCopy,SIGNAL(triggered()),pTempEdit,SLOT(copy())); connect(pTempEdit,SIGNAL(copyAvailable(bool)),ui->actionCut,SLOT(setEnabled(bool))); connect(ui->actionCut,SIGNAL(triggered()),pTempEdit,SLOT(cut())); editConnection=true; } pTextEdit указатель на один из QTextEdit'ов editConnection переменная, чтобы избежать критической ошибки, связанной с disconnect не соеденённых сигналов и слотов. Пробовал добавить в if, чтобы обновлять активность кнопок, но после этого они вообще становятся неактивными и никак на сигналы и слоты не реагируют.
|
|
|
wiz29 |
![]()
Сообщение
#2
|
![]() Старейший участник ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 600 Регистрация: 7.7.2010 Из: Санкт-Петербург Пользователь №: 1866 Спасибо сказали: 94 раз(а) Репутация: ![]() ![]() ![]() |
кнопка Undo так и осталась активированой
Сообщение отредактировал wiz29 - 18.11.2011, 11:21 |
|
|
![]() ![]() ![]() |
![]() |
Текстовая версия | Сейчас: 16.2.2025, 21:12 |