2016-03-05 2 views
3

Мне нужно установить только одну вкладку в QTabWidget как не подвижную. Я не могу найти способ сделать это. Также в Qt-дизайнере вы можете (un) проверить «подвижный», но это не работает только для одной конкретной вкладки.Как установить только одну вкладку в QTabWidget как не подвижную в Qt?

ответ

3

Глядя на source code of QTabBar (подэлемент QTabWidget), кажется, что это невозможно. Для всех вкладок существует только одно свойство movable.

Однако, вы можете попробовать следующее:

  1. Подкласс QTabBar и поймать событие нажатия мыши, прежде чем перетащить начинает включить или отключить перемещение вкладок. Что-то вроде этого:

    void MyTabBar::mousePressEvent(QMouseEvent *event) { 
        // all tabs movable except first 
        setMovable(tabAt(event->pos()) != 0); 
    
        QTabBar::mousePressEvent(event); 
    } 
    
  2. Затем перед добавлением вкладки, замените TabBar по умолчанию с подкласса:

    myTabWidget->setTabBar(new MyTabBar()); 
    

Это, вероятно, немного неплотно, я не пробовал вне. Первое, что приходит в голову, это то, что setMovable() больше не работает. Возможно, перетаскивание некоторых других вкладок приведет к некоторому нечетному поведению.


Рассматривали ли вы, что, может быть, QTabWidget не правильный GUI-элемент? Нет графического указания, что вкладки перетаскиваются или нет, и может запутать пользователя. Возможно, лучше использовать QStackedWidget и настраиваемый способ изменения между страницами.

+0

Благодарим за помощь. Я не понимаю, почему люди задали этот вопрос. Я думаю, что мой вопрос не совсем ясен. Как вы думаете? – Engo

+0

@Engo: Мои две догадки: (а) вы задаете только вопрос в заголовке (что вполне приемлемо) и (b) терминология Qt * movable * может быть нелегко понять. Объедините это с огромной закрытой очередью, где каждый будет тратить только секунды на каждый вопрос ... вы получаете картину. :-) –