Russian Qt Forum
Сентябрь 30, 2024, 12:28 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Глюк QDockWidget при смене фокуса TAB-ом  (Прочитано 3772 раз)
yoyo
Гость
« : Ноябрь 07, 2008, 16:18 »

При использовании нескольких QDockWidget-ов, размещенных с помощью tabifyDockWidget, переключение фокуса клавишей TAB приводит к установке фокуса в неотображаемый в данный момент виджет (неактивная вкладка QTabBar). Прилагаю тест, см. ниже
Код:
#include <QApplication>
#include <QMainWindow>
#include <QAction>
#include <QMenu>
#include <QMenuBar>
#include <QDockWidget>
#include <QTextEdit>

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow()
    {
        QTextEdit *te = new QTextEdit;
        te->setTabChangesFocus(true);
        setCentralWidget(te);

        QAction *exitAct = new QAction(tr("E&xit"), this);
        exitAct->setShortcut(tr("Ctrl+Q"));
        connect(exitAct, SIGNAL(triggered()), this, SLOT(close()));
        QMenu *fileMenu = new QMenu(tr("&File"), this);
        fileMenu->addAction(exitAct);
        menuBar()->addMenu(fileMenu);

        QTextEdit *te1 = new QTextEdit;
        te1->setTabChangesFocus(true);
        QDockWidget *dw1 = new QDockWidget(tr("dw1"), this);
        dw1->setWidget(te1);
        addDockWidget(Qt::RightDockWidgetArea, dw1);

        QTextEdit *te2 = new QTextEdit;
        te2->setTabChangesFocus(true);
        QDockWidget *dw2 = new QDockWidget(tr("dw2"), this);
        dw2->setWidget(te2);
        tabifyDockWidget(dw1, dw2);

        setWindowTitle(tr("Test Focus"));
        resize(600, 400);
    }

};

int main(int argc, char *argv[])
{
    QApplication app(argc, argv);
    MainWindow window;
    window.show();
    return app.exec();
}

#include "main.moc"
Задача частично решается установкой обработчика сигнала visibilityChanged(bool), например
Код:
void DockWidgetEx::onVisibilityChanged(bool visible)
{
  setEnabled(visible);
}
Однако, при запуске программ (после show) значения visible для всех DockWidget-ов установлены в true. Это обидно. Необходима, дополнительная проверка для доков, т.е. dock видим или если он используется с QTabBar, - что он является текущим. Глюк пропадает только после смены текущей вкладки или перетаскивании дока (с использованием обработчика onVisibilityChanged). В Qt4.5 появился метод tabifiedDockWidgets(QDockWidget *dockwidget), но он не дает ответа о настоящей видимости дока. Кто нибудь знает как это сделать или может решил подобную проблему более элегантным способом? Респект заранее.
Записан
yoyo
Гость
« Ответ #1 : Ноябрь 20, 2008, 07:16 »

Интересно, Троли знают про этот баг?
Записан
pastor
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 2901



Просмотр профиля WWW
« Ответ #2 : Ноябрь 20, 2008, 11:21 »

Интересно, Троли знают про этот баг?

Отправьте репорт Тролям и узнаете Подмигивающий
Записан

Integrated Computer Solutions, Inc. (ICS)
http://www.ics.com/
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.16 секунд. Запросов: 22.