crossplatform.ru

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

 
Ответить в данную темуНачать новую тему
> двойной клик на tabWidget
B_u_R_n
  опции профиля:
сообщение 7.12.2011, 14:10
Сообщение #1


Студент
*

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

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




Репутация:   0  


Помогли мне с классом , получилось вот что
class MyTabWidget : public QTabWidget
{
    Q_OBJECT
public:
    MyTabWidget(QWidget *parent = 0) : QTabWidget(parent)
    {
        tabBar()->installEventFilter(this);
    }

signals:
    void tabBarDoubleClicked();

protected:
    bool eventFilter(QObject *o, QEvent *e)
    {
        if (o != tabBar())
            return false;

        if (e->type() == QEvent::MouseButtonDblClick) {
            QMouseEvent *me = static_cast<QMouseEvent *>(e);

            if (tabBar()->tabAt(me->pos()) != -1)
            {
                emit tabBarDoubleClicked();
            }

            return true;
        }
        return false;
    }
};

но почему-то если вклад несколько, сигнал срабатывает столько раз, сколько страниц на tabWidget -е моем
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
novichkov
  опции профиля:
сообщение 7.12.2011, 14:31
Сообщение #2


Студент
*

Группа: Участник
Сообщений: 64
Регистрация: 20.3.2008
Из: Северодвинск
Пользователь №: 128

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




Репутация:   1  


А у меня переопределен mouseDoubleClickEvent:

class TabBar : public QTabBar
{
    Q_OBJECT
signals:
    void doubleClicked(int);
public:
    TabBar(QWidget *parent = 0);
protected:
    void mouseDoubleClickEvent(QMouseEvent * event) {
        int pos=tabAt(event->pos());
        if (event->button()==Qt::LeftButton && pos!=-1)
            emit doubleClicked(pos);
    }
};

class TabWidget : public QTabWidget
{
    Q_OBJECT
public:
    explicit TabWidget(QWidget *parent = 0): QTabWidget(parent)
    , m_tabBar(new TabBar(this))
{//Trace trace(Q_FUNC_INFO);
    connect(m_tabBar, SIGNAL(doubleClicked(int)), this, SIGNAL(newTab(int)));
    setTabBar(m_tabBar);
}
signals:
    void newTab(int);
private:
    TabBar *m_tabBar;
};


Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
B_u_R_n
  опции профиля:
сообщение 7.12.2011, 14:44
Сообщение #3


Студент
*

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

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




Репутация:   0  


вот сразу дабы не плодить темы , а есть ли возможность динамически на определенную табу добавлять функцию закрытия ее пользователем(на странице таба крестик ) что бы пользователь мог его закрыть, после определенных действий
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
silver47
  опции профиля:
сообщение 7.12.2011, 18:04
Сообщение #4


Активный участник
***

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

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




Репутация:   6  


QObject::connect(TAB, SIGNAL(tabCloseRequested(int)), this, SLOT(closeTabRequest(int)));

А там уж что хотите делайте с виджетом :) проверяйте состояние и выводите запрос на сохранение, или же удаляйте таб и удаляйте виджет.
Пы.Сы. чтобы предупредить упреки в мой адрес, я традиционно, делю проверку на сохраненные\не сохраненные изменения в переопределенном методе CloseEvent

Сообщение отредактировал silver47 - 7.12.2011, 18:07
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
novichkov
  опции профиля:
сообщение 7.12.2011, 18:23
Сообщение #5


Студент
*

Группа: Участник
Сообщений: 64
Регистрация: 20.3.2008
Из: Северодвинск
Пользователь №: 128

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




Репутация:   1  


QTabWidget::setTabsClosable ( bool closeable )
+ соответствующий слот, как сказал silver47
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

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


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




RSS Текстовая версия Сейчас: 28.3.2024, 12:30