Мне нужно установить только одну вкладку в QTabWidget как не подвижную. Я не могу найти способ сделать это. Также в Qt-дизайнере вы можете (un) проверить «подвижный», но это не работает только для одной конкретной вкладки.Как установить только одну вкладку в QTabWidget как не подвижную в Qt?
ответ
Глядя на source code of QTabBar
(подэлемент QTabWidget
), кажется, что это невозможно. Для всех вкладок существует только одно свойство movable
.
Однако, вы можете попробовать следующее:
Подкласс
QTabBar
и поймать событие нажатия мыши, прежде чем перетащить начинает включить или отключить перемещение вкладок. Что-то вроде этого:void MyTabBar::mousePressEvent(QMouseEvent *event) { // all tabs movable except first setMovable(tabAt(event->pos()) != 0); QTabBar::mousePressEvent(event); }
Затем перед добавлением вкладки, замените TabBar по умолчанию с подкласса:
myTabWidget->setTabBar(new MyTabBar());
Это, вероятно, немного неплотно, я не пробовал вне. Первое, что приходит в голову, это то, что setMovable()
больше не работает. Возможно, перетаскивание некоторых других вкладок приведет к некоторому нечетному поведению.
Рассматривали ли вы, что, может быть, QTabWidget
не правильный GUI-элемент? Нет графического указания, что вкладки перетаскиваются или нет, и может запутать пользователя. Возможно, лучше использовать QStackedWidget
и настраиваемый способ изменения между страницами.
Благодарим за помощь. Я не понимаю, почему люди задали этот вопрос. Я думаю, что мой вопрос не совсем ясен. Как вы думаете? – Engo
@Engo: Мои две догадки: (а) вы задаете только вопрос в заголовке (что вполне приемлемо) и (b) терминология Qt * movable * может быть нелегко понять. Объедините это с огромной закрытой очередью, где каждый будет тратить только секунды на каждый вопрос ... вы получаете картину. :-) –