0 / 0 / 0
Регистрация: 06.12.2018
Сообщений: 17
1

QTabWidget пропадает содержимое вкладки при переключении на другую

30.11.2019, 17:23. Показов 2291. Ответов 18
Метки c++, qt (Все метки)

Студворк — интернет-сервис помощи студентам
Товарищи, подскажите, что за чудо такое когда GridLayout с содержимым во вкладке пропадает при переключении на другую вкладку, а при повторной попытки его отобразить в первой вкладке появляется содержимое второй. слегка запутано, но так и есть
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
30.11.2019, 17:23
Ответы с готовыми решениями:

Пропадает значок на панели задач при переключении на другую форму
Когда запускаю свою программу на панеле задач появляеться значек что моя прога запущена, но когда я...

Пропадают вкладки при переключении
Добрый день. Пытаюсь помочь знакомому сделать магазин. Столкнулся с проблемой и никак не могу...

Тормозит setInterval при переключении вкладки
Здравствуйте, есть проблема, связанная с тем, что браузеры сильно замедляют работу setInterval если...

Пропадает окантовка форм при переключении между табами
Здравствуйте! Использую Delphi6. Имею программу реализующая Drag and Dock Нажать кнопки в...

18
фрилансер
4927 / 4576 / 966
Регистрация: 11.10.2019
Сообщений: 11,976
30.11.2019, 19:32 2
Бодян, форму накидывал в дизайнере или вручную?
0
0 / 0 / 0
Регистрация: 06.12.2018
Сообщений: 17
30.11.2019, 21:17  [ТС] 3
Алексей1153,Вручную, неужели поэтому?
0
фрилансер
4927 / 4576 / 966
Регистрация: 11.10.2019
Сообщений: 11,976
30.11.2019, 21:27 4
Бодян, видимо, какой-то косячок допустил

прицепи проект, посмотрю
0
0 / 0 / 0
Регистрация: 06.12.2018
Сообщений: 17
30.11.2019, 21:39  [ТС] 5
Алексей1153, все получилось спасибо, почему то в Layout неадекватно добавлялся объект из контейнерного класса. Решил используя такое:
C++ (Qt)
1
layoutGrid->addWidget(new QLabel(m_labelMass[counter]->text())
0
фрилансер
4927 / 4576 / 966
Регистрация: 11.10.2019
Сообщений: 11,976
30.11.2019, 21:51 6
Цитата Сообщение от Бодян Посмотреть сообщение
неадекватно добавлялся объект из контейнерного класса
какой тип у контейнера?
0
0 / 0 / 0
Регистрация: 06.12.2018
Сообщений: 17
30.11.2019, 21:57  [ТС] 7
Алексей1153, Самодельный класс, с предком QLabel.
0
фрилансер
4927 / 4576 / 966
Регистрация: 11.10.2019
Сообщений: 11,976
30.11.2019, 22:02 8
Бодян, субклассинг должОн работать, если всё правильно сделано. В частности, не забыть макрос Q_OBJECT и передать parent в конструктор родительского типа
1
0 / 0 / 0
Регистрация: 06.12.2018
Сообщений: 17
30.11.2019, 22:10  [ТС] 9
Алексей1153, такого я даже не учёл, спасибо, поправлю, ради интереса попробую еще раз. А если вот так обозвать конструктор class label : public QLabel {} . Так не наследуется все подряд вместе с макросами?
0
фрилансер
4927 / 4576 / 966
Регистрация: 11.10.2019
Сообщений: 11,976
30.11.2019, 22:17 10
макросы не наследуются

C++ (Qt)
1
2
3
4
5
6
7
8
class label : public QLabel
{
    Q_OBJECT // я про этот макрос
public:
    label(QWidget* parent = nullptr):QLabel(parent)//а так нужно передавать parent в конструктор предка
    {
    }
}
Q_OBJECT
The Q_OBJECT macro must appear in the private section of a class definition that declares its own signals and slots or that uses other services provided by Qt's meta-object system.
1
0 / 0 / 0
Регистрация: 06.12.2018
Сообщений: 17
30.11.2019, 22:28  [ТС] 11
Алексей1153, вас понял) спасибо ещё раз, завтра тогда проверю
0
0 / 0 / 0
Регистрация: 06.12.2018
Сообщений: 17
01.12.2019, 09:21  [ТС] 12
Алексей1153, попробовал сделать с учётом субклассинга
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#ifndef LABEL_H
#define LABEL_H
 
#include "QLabel"
#include "QString"
 
class label : public QLabel
{
    Q_OBJECT
public:
    explicit label(QWidget *parent = nullptr);
 
};
 
#endif // LABEL_H
для .срр
C++ (Qt)
1
2
3
4
5
6
#include "label.h"
 
label::label(QWidget *parent) : QLabel (parent)
{
 
}
в итоге - ошибка: undefined reference to `vtable for label'
0
фрилансер
4927 / 4576 / 966
Регистрация: 11.10.2019
Сообщений: 11,976
01.12.2019, 09:26 13
Бодян, сделай полный ребилд проекта

Добавлено через 40 секунд
и, кстати,
#include <QLabel>
#include <QString>
0
Эксперт .NET
5495 / 4264 / 1212
Регистрация: 12.10.2013
Сообщений: 12,265
Записей в блоге: 2
01.12.2019, 09:36 14
Лучший ответ Сообщение было отмечено Бодян как решение

Решение

Цитата Сообщение от Бодян Посмотреть сообщение
что за чудо такое
Никаких чудес нет, вот пример, все отображается как и должно.
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#ifndef WIDGET_H
#define WIDGET_H
 
#include <QtWidgets>
 
class Widget : public QWidget
{
    Q_OBJECT
 
public:
    Widget(QWidget *parent = 0);
    ~Widget();
};
 
#endif // WIDGET_H
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
#include "Widget.h"
 
Widget::Widget(QWidget *parent)
    : QWidget(parent)
{
    QPushButton* pAPushButton=new QPushButton("A");
    QPushButton* pBPushButton=new QPushButton("B");
    QPushButton* pCPushButton=new QPushButton("C");
    QPushButton* pDPushButton=new QPushButton("D");
 
    QTabWidget* pTabWidget=new QTabWidget;
    QWidget* pTabAWidget=new QWidget(pTabWidget);
    QWidget* pTabBWidget=new QWidget(pTabWidget);
 
    QGridLayout* pTabAGridLayout=new QGridLayout;
    QGridLayout* pTabBGridLayout=new QGridLayout;
 
    pTabAGridLayout->addWidget(pAPushButton,0,0);
    pTabAGridLayout->addWidget(pBPushButton,0,1);
 
    pTabBGridLayout->addWidget(pCPushButton,0,0);
    pTabBGridLayout->addWidget(pDPushButton,0,1);
 
    pTabAWidget->setLayout(pTabAGridLayout);
    pTabBWidget->setLayout(pTabBGridLayout);
 
    pTabWidget->addTab(pTabAWidget,"Tab Widget A/B");
    pTabWidget->addTab(pTabBWidget, "Tab Widget C/D");
 
    QVBoxLayout* pVBoxLayout=new QVBoxLayout;
    pVBoxLayout->addWidget(pTabWidget);
    setLayout(pVBoxLayout);
 
}
 
Widget::~Widget()
{
 
}
1
0 / 0 / 0
Регистрация: 06.12.2018
Сообщений: 17
01.12.2019, 11:59  [ТС] 15
insite2012, вы правы, делал в дизайнере упустил Layout и все непонятно собирается теперь. Я ведь правильно понял, что должна выполняться цепочка Layout->Widget->layout ?
0
Эксперт .NET
5495 / 4264 / 1212
Регистрация: 12.10.2013
Сообщений: 12,265
Записей в блоге: 2
01.12.2019, 12:40 16
Цитата Сообщение от Бодян Посмотреть сообщение
делал в дизайнере
Плохая практика. Учитесь делать все руками, чтобы понимать то, что происходит. Я стараюсь не использовать дизайнер вообще, максимум-растянуть созданную по умолчанию форму. Все остальное нужно писать руками, инструменты для этого есть.
Цитата Сообщение от Бодян Посмотреть сообщение
Я ведь правильно понял, что должна выполняться цепочка Layout->Widget->layout ?
Смотря как компоновать. В один менеджер компоновки можно добавить другой, в него же можно добавить и виджеты. Все зависит от ваших требований. Если это в голове не укладывается, возьмите лист бумаги, нарисуйте как и что должно быть расположено, и потом стройте интерфейс кодом.
0
фрилансер
4927 / 4576 / 966
Регистрация: 11.10.2019
Сообщений: 11,976
01.12.2019, 12:54 17
Цитата Сообщение от insite2012 Посмотреть сообщение
Плохая практика.
да ничего плохого нет. Разобраться, как устроено - это полезно и нужно. Это обязательно пригодится.
Но дизайнер экономит время. Если по-прежнему хочется ковыряться в деталях, то первоначальный макет набрасывается в дизайнере, а потом можно нырять с головой в детализацию.

Вообще, по моим наблюдениям, эти два процесса обычно не пересекаются: там, где пригоден дизайнер, в коде формы и не требуется ковыряться руками.
А там, где только вручную можно сделать, там дизайнер и не поможет (разве что тот же макет накидать и посмотреть, как что-либо делается, чтобы потом это знание использовать вручную)
0
0 / 0 / 0
Регистрация: 06.12.2018
Сообщений: 17
01.12.2019, 13:17  [ТС] 18
insite2012, а как насчет QtQuick ? Может рациональнее в нём собирать?
0
Эксперт .NET
5495 / 4264 / 1212
Регистрация: 12.10.2013
Сообщений: 12,265
Записей в блоге: 2
01.12.2019, 15:57 19
Цитата Сообщение от Бодян Посмотреть сообщение
как насчет QtQuick ? Может рациональнее в нём собирать?
Можно и в нем, почему нет. Но там немного другая концепция. Я пока в него глубоко не вдавался, так, немного поэкспериментировал, чуть позже постепенно займусь. Он, конечно, нужен, поскольку у меня есть кое-какие проекты, которые успешно работают на Windows, и их желательно бы портировать на Android (для расширения группы потенциальных пользователей).
Одна из сложностей, как я понял, при использовании QtQuick заключается в его связи с основным кодом на С++, если проект чуть посложнее чем HelloWorld. Как минимум, придется написать класс-прокси, обеспечивающий сигнально-слотовые соединения между интерфейсом и бизнес-логикой. Конечно, если рабочий класс на С++ всего один то это просто, но когда их несколько, и с использованием наследования и прочего, задача усложняется. Но все решаемо.
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
01.12.2019, 15:57
Помогаю со студенческими работами здесь

При переключении между программами пропадает текст в RadioGroup
Программа написана в Delphi 7. При переключении между программами пропадает текст в RadioGroup....

WebBrowser пропадает при переключении между вкладками PageControl-а
Всем добрего времени суток, нужна помощь с page-ми. При нажатии на btn зделал создание новава...

Создание вкладки в QTabWidget по сигналу
Есть ли возможность в QTabWidget создавать вкладки по сигналу, например по нажатию кнопки?...

Поменять местами вкладки в QTabWidget
Возникла вот такая проблема. Нужно с помощью дизайнера поменять порядок вкладок.


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
19
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru