Форум программистов, компьютерный форум, киберфорум
C++ Qt
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
2 / 2 / 0
Регистрация: 04.07.2021
Сообщений: 101

Отладка виджета

15.06.2025, 21:15. Показов 5277. Ответов 56
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
пытаюсь сделать отладку кода но виджет мигнет и висит. смотрите скрины


но если закоментирую часть кода которая не относится к виджету он запускается нормально
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
15.06.2025, 21:15
Ответы с готовыми решениями:

Как навести мышку на x,y внутри виджета относительно 0,0 виджета (левого верхнего угла виджета)?
Как навести мышку на x,y внутри виджета относительно 0,0 этого виджета (левого верхнего угла...

Вызов одного виджета из другого виджета
добрый день, есть 2 формы, сделанные в дизайнере. По нажатию на кнопку из формы 1 хочу чтобы...

Как добраться до виджета, который находится внутри другого виджета?
Есть QStackWidget, внутри которого на одной из страниц-виджетов находится QTabWidget....

56
2 / 2 / 0
Регистрация: 04.07.2021
Сообщений: 101
25.06.2025, 09:29  [ТС]
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от sdf45 Посмотреть сообщение
CompanyShares ничего не знает про xlsxR.
до того как я его объявил глобально, компилятор на него ругался. сейчас то не ругается.
сейчас при отладке вот что выдает:
0
2 / 2 / 0
Регистрация: 04.07.2021
Сообщений: 101
25.06.2025, 09:33  [ТС]

вот сюда перекидывает
0
Покинул чат.
1133 / 728 / 195
Регистрация: 30.03.2021
Сообщений: 2,379
25.06.2025, 13:47
Цитата Сообщение от MVDmitrii Посмотреть сообщение
объявил глобально
сделай полем класса
Цитата Сообщение от MVDmitrii Посмотреть сообщение
сейчас при отладке вот что выдает:
где-то косяк с памятью, например выход за пределы массива или битый указатель, ... ets

Добавлено через 1 минуту
и вообще показал бы код хотя бы CompanyShares, а то гадать-неблагодарное дело
0
2 / 2 / 0
Регистрация: 04.07.2021
Сообщений: 101
25.06.2025, 16:22  [ТС]
Цитата Сообщение от sdf45 Посмотреть сообщение
показал бы код хотя бы CompanyShares
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
#include "companyshares.h"
#include "ui_companyshares.h"
#include <QMessageBox>
#include <QTime>
CompanyShares::CompanyShares(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::CompanyShares)
{
    ui->setupUi(this);
 
    QObject::connect(ui->spinBox,SIGNAL(valueChanged(int)),this,SLOT(on_spinBox_valueChanged(int)));
    QObject::connect(ui->pushButton,SIGNAL(clicked(bool)),this,SLOT(on_pushButton_clicked()));
}
 
CompanyShares::~CompanyShares()
{
    delete ui;
}
 
void CompanyShares::on_spinBox_valueChanged(int arg1)
{
    new_value = arg1;
}
 
void CompanyShares::on_pushButton_clicked()
{
    totalAmount = totalAmount + new_value;
    xlsxR->selectSheet("График"); // открываем лист
    xlsxR->write(2,4,totalAmount);// записываем значение портфеля
    if (xlsxR->write(2,4,totalAmount))//если записалось
    {   //выдаем информационное табло что принято
        QMessageBox::information(this,"","Принято!");
        QApplication::quit();
    }
}
0
 Аватар для SmallEvil
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
25.06.2025, 16:33
sdf45, серьезно?
И не отправим его изучать QT фрейморк архитектуру и принципы?
Пусть и дальше кодит наугад?
Я только за!

Цитата Сообщение от MVDmitrii Посмотреть сообщение
а как правильно?
Если уж на С++ пишите, да ещё и на QT, тогда только один естественный вариант - ООП подход.
То есть, всё что касается работы с файлом екселя - в отдельный класс.
GUI - отдельно | логика программы - отдельно.

Это с чего начать, что бы не быть как Вася.
0
Покинул чат.
1133 / 728 / 195
Регистрация: 30.03.2021
Сообщений: 2,379
25.06.2025, 20:23
MVDmitrii, заголовочник не показал.

Цитата Сообщение от SmallEvil Посмотреть сообщение
И не отправим его изучать QT фрейморк архитектуру и принципы?
и еще в "с++ для начинающих" не помешает по-моему...

Добавлено через 4 минуты
Цитата Сообщение от SmallEvil Посмотреть сообщение
То есть, всё что касается работы с файлом екселя - в отдельный класс.
GUI - отдельно | логика программы - отдельно.
Угу. Так легче будет потом понять/исправлять/менять

Я бы сделал отдельный класс (невизуальный), чисто для работы с эксель документом, а из него уже запрашивать данные в визуальную часть.
Схематично как-то так можно
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
40
41
42
43
44
 
//насл. от QOBject что бы можно использовать сигналы/слоты и не заботиться временем жизни обьекта такого класса
 
class ExelAdvance: public QObject 
{
     Q_OBJECT
private:
     QPointer<QXlsx::Document> xlsxR ; //QPointer для более безопасного обращения с указателем
     //прочие переменные и тд, по необходимости с геттерами/сеттерами
public:
     ExelAdvance(QObject *parent = nullptr):QObject(parent){
           //...
           xlsxR = new QXlsx::Document(/* ... */);
     }
     //...
public slots:
     void someSlot();
public:
     QVariantList exelData()const;//извлечение данных с документа екселя
     bool exelModify(); //какая-то модификация документа
};
 
//...
void ExelAdvance::someSlot()
{
    //...
    if(xlsxR){
        //...
    }
}
 
//и где то в визуальной части, в QMainWindow например
auto exelAdvance = new ExelAdvance(this);
//...
auto data= exelAdvance->exelData();
for(const auto value : data){
     myQLabel->setText(value.toString()); //пихаем данные с экселя в некую визуальную часть
}
 
//или просто модификация документа нужна? 
    if(exelAdvance ->exelModify()) {/* ... */} else {/* ... */}
 
//или подключаем слот к кнопке на QMainWindow
    connect(myBtn, &QPushButton::clicked, exelAdvance, &ExelAdvance::someSlot);
И вот тот while(1) внушает опасения. Может, в той либе есть возможность узнать кол-во строчек на листе екселя? Если есть то цикл for. Или че нить подобное, я не знаю эту библиотеку.

Ну и в будущем потоки, QFuture там всякие и тд.
1
 Аватар для SmallEvil
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
26.06.2025, 02:04
Цитата Сообщение от sdf45 Посмотреть сообщение
Ну и в будущем потоки
Да куда тут потоки, тут ня 0,005 сек операций.
Просто Вася думает что он Билл Гейтс и в питоне всё эт опросто делается.
ну вот и всё
0
26.06.2025, 03:03

Не по теме:

Цитата Сообщение от SmallEvil Посмотреть сообщение
Да куда тут потоки
SmallEvil, это я так, на будущее (как и в посте уточнил),
Мало ли... вдруг прийдется все части "Дюна" вывести в текстэдит с файла, или эксель документ окажется очень большим :)
По сути, этот схематический класс ExelAdvance -тоже что и класс Worker из примера по QThread документации Qt (или легко в него модифицируется при надобности). Имхо - это необязательно,- но может пригодиться в такого рода задачах, поэтому упомянул потоки. Ну это оффтоп в данной теме, наверное, да... Пусть сначала с классами разберется ТС.

0
2 / 2 / 0
Регистрация: 04.07.2021
Сообщений: 101
28.06.2025, 11:08  [ТС]
Цитата Сообщение от SmallEvil Посмотреть сообщение
Просто Вася думает что он Билл Гейтс и в питоне всё эт опросто делается.
при чем тут питон, и кого вы называете Васей? меня?
0
Покинул чат.
1133 / 728 / 195
Регистрация: 30.03.2021
Сообщений: 2,379
28.06.2025, 15:48
Поставил QXlsx
Цитата Сообщение от sdf45 Посмотреть сообщение
Может, в той либе есть возможность узнать кол-во строчек на листе екселя?
Есть же
C++ (Qt)
1
2
if(auto sheet=xlsxR->currentWorksheet())
            qDebug()<< sheet->dimension().columnCount() << sheet->dimension().rowCount();
1
2 / 2 / 0
Регистрация: 04.07.2021
Сообщений: 101
28.06.2025, 21:59  [ТС]
А зачем мне количество строк? Смысл там такой: записали дату текущую, следующий раз перебираем строчки находим пустую, записываем дату. Там по мимо даты будут ещё данные в этой строке, но это уже попутное исполнение.
0
2 / 2 / 0
Регистрация: 04.07.2021
Сообщений: 101
28.06.2025, 22:26  [ТС]
Аааа чтобы их не считать а получить сходу.
есть вот такой метод:
0
2 / 2 / 0
Регистрация: 04.07.2021
Сообщений: 101
28.06.2025, 22:27  [ТС]
0
2 / 2 / 0
Регистрация: 04.07.2021
Сообщений: 101
28.06.2025, 23:13  [ТС]
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
int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    CompanyShares w;
    w.show();
 
    QDate today = QDate::currentDate(); // читаем сегодняшнюю дату и записываем в переменную today
    xlsxR->selectSheet("График"); // открываем лист
    CellRange range = xlsxR->dimension();//создаем объект CellRange и применяем функцию dimension()
    unsigned char sts = range.rowCount();// теперь можем применить метод rowCount() который позволяет получить число строк
    stroka = sts + 1;//переходим к следующей строке
    xlsxR->write(stroka,colum_datatime,today);// записываем дату
    xlsxR->selectSheet("равновесный");//открываем лист "равновеснывй"
    QVariant casevalue = xlsxR->read(22,8);//считываем значение портфеля
    unsigned int value = casevalue.toUInt();//временная внутренняя переменная для извлечения числа из QVariant
    case_index = (value - totalAmount) *2780/380000;
    xlsxR->selectSheet("График");//открываем лист "график"
    xlsxR->write(stroka,brief, case_index);// записываем значение портфеля
 
    xlsxR->selectSheet("IMOEX2");//открываем лист "IMOEX2"
    QVariant imoex_index = xlsxR->read(3,2);//считываем значение индекса
    xlsxR->selectSheet("График");//открываем лист "график"
    xlsxR->write(stroka,IMOEX2, imoex_index);// записываем значение индекса
 
    xlsxR->saveAs("D:/OneDrive/Documents/Qt projects/CaseCpp/portf.xlsx"); // сохраняем все изменения
 
    delete xlsxR;//очищаем память (закрываем документ)
    return a.exec();
}
вот так ушел от бесконечного цикла, хотя и осталось непонятным почему он вас не устраивал.

Добавлено через 4 минуты
Цитата Сообщение от sdf45 Посмотреть сообщение
Я бы сделал отдельный класс (невизуальный)
что вы описали в примере для меня пока сложно.
0
Покинул чат.
1133 / 728 / 195
Регистрация: 30.03.2021
Сообщений: 2,379
29.06.2025, 00:06
Цитата Сообщение от MVDmitrii Посмотреть сообщение
А зачем мне количество строк?
что бы избавиться от while(1)

Вообще я либу только поставил, знаний ноль,- и не хотелось бы херню по незнанию писать.
Ну вот тест на коленке
Кликните здесь для просмотра всего текста

Не по вашей задаче, а просто пощупать либу 1й раз
возможно с ошибками, но вроде работает-создал эксел файл на несколько строчек в одной колонке с рандомными цифрами в ячейках, и пример меняет эти цифры на дату

в main.cpp
ExelAdvance exelAdvance("путь до файла");
exelAdvance.exelModify();

отдельный заголовочник
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
40
41
42
43
44
45
46
47
48
#include "xlsxdocument.h"
#include "xlsxchartsheet.h"
#include "xlsxcellrange.h"
#include "xlsxchart.h"
#include "xlsxrichstring.h"
#include "xlsxworkbook.h"
using namespace QXlsx;
 
#include <QObject>
#include <QPointer>
#include <QDate>
 
class ExelAdvance: public QObject
{
    Q_OBJECT
 
private:
    QPointer<QXlsx::Document> xlsx ;
 
public:
    ExelAdvance(QString path, QObject *parent = nullptr):QObject(parent){
        xlsx = new QXlsx::Document(path);      
    }
 
    ~ExelAdvance(){
        if(xlsx)
            xlsx.get()->deleteLater();        
    }
 
public:
    void exelModify(){
        if(!xlsx)
            return;
        QDate today = QDate::currentDate();
        //если есть текущий лист
        if(auto sheet=xlsx.get()->currentWorksheet()){
            //перебираем все его строчки
            for(int row=1; row<=sheet->dimension().rowCount(); row++){
                auto value=sheet->read(row, 1);//берем значение из ячейки
                //если не удалось преобразовать к дате
                if(!value.toDate().isValid()){
                    qDebug()<<sheet->write(row,1, QVariant(today));//пишем в такую ячейку дату
                }
            }
            xlsx.get()->save();
        }
    }
};


Добавлено через 3 минуты
Цитата Сообщение от MVDmitrii Посмотреть сообщение
почему он вас не устраивал.
да мне во сути, все равно может и правильный у вас там код, но лично меня такие циклы настораживают всегда, вот и обратил внимание... Если все работает то пишите как вам больше нравится.

Добавлено через 31 минуту
зы а где вы смотрите описание методов QXlsx как на скриншотах?
0
2 / 2 / 0
Регистрация: 04.07.2021
Сообщений: 101
07.07.2025, 15:39  [ТС]
в companyshares.h пишу:
C++ (Qt)
1
extern QXlsx::Document* xlsxR;
в companyshares.срр:
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
#include "companyshares.h"
QXlsx::Document* xlsxR = new QXlsx::Document ("D:/OneDrive/Documents/Qt projects/CaseCpp/portf.xlsx");
void CompanyShares::on_pushButton_clicked()
{
    totalAmount = totalAmount + new_value;
    xlsxR->selectSheet("График"); // открываем лист
    xlsxR->write(2,4,totalAmount);// записываем значение портфеля
    if (xlsxR->write(2,4,totalAmount))//если записалось
    {   //выдаем информационное табло что принято
        QMessageBox::information(this,"","Принято!");
        QApplication::quit();
    }
}
при отладке на строке xlsxR->selectSheet("График"); // открываем лист вылетает та же ошибка из поста 21

Добавлено через 4 минуты
небольшое уточнение, стрелка отладки стоит на этой строке и при нажатии далее вылетает ошибка. выходит не может выполниться строка следующая xlsxR->write(2,4,totalAmount);// записываем значение портфеля???
0
Покинул чат.
1133 / 728 / 195
Регистрация: 30.03.2021
Сообщений: 2,379
07.07.2025, 16:12
Цитата Сообщение от MVDmitrii Посмотреть сообщение
в companyshares.h пишу:
C++ (Qt)
1
extern QXlsx:ocument* xlsxR;
MVDmitrii, как давно пишете на с++ ? На кой черт extern?
Хотя бы бегло просмотрите гайды по классам с++ иначе ппц.
(и что то там мелькало про питон - в Qt можно писать на питоне)

Сделайте xlsxR полем класса, я выше привел пример же.
Даже пусть без смартпоинтера а сырой указатель
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
class CompanyShares
{
   //...
private:
   QXlsx::Document* xlsxR=nullptr;
public:
   CompanyShares(/*...*/){
       xlsxR = new QXlsx::Document ("D:/OneDrive/Documents/Qt projects/CaseCpp/portf.xlsx");
       //и в деструкторе (или еще где-то) удалить не забудь все что создано с помощью new без задания владельца
   }
}

Проверяйте указатель перед использованием
C++ (Qt)
1
2
3
4
5
6
void CompanyShares::on_pushButton_clicked()
{
    if(xlsxR){
       //...
    }
}
0
2 / 2 / 0
Регистрация: 04.07.2021
Сообщений: 101
07.07.2025, 16:18  [ТС]
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
void CompanyShares::on_pushButton_clicked()
{
    QXlsx::Document* xlsxR = new QXlsx::Document ("D:/OneDrive/Documents/Qt projects/CaseCpp/portf.xlsx");
    xlsxR->selectSheet("График"); // открываем лист
    QVariant tA = xlsxR->read(2,4);
    totalAmount = tA.toUInt();
    totalAmount = totalAmount + new_value;
    xlsxR->write(2,4,totalAmount);// записываем значение портфеля
    if (xlsxR->write(2,4,totalAmount))//если записалось
    {   //выдаем информационное табло что принято
        QMessageBox::information(this,"","Принято!");
        QApplication::quit();
    }
}
решил проблему вот так
0
фрилансер
 Аватар для Алексей1153
6506 / 5755 / 1134
Регистрация: 11.10.2019
Сообщений: 15,404
07.07.2025, 16:22
MVDmitrii, утечка памяти - это UB, запись может и не произвестись
0
 Аватар для Ender Che
521 / 411 / 77
Регистрация: 29.05.2018
Сообщений: 1,366
07.07.2025, 16:22
Цитата Сообщение от sdf45 Посмотреть сообщение
в Qt можно писать на питоне
Вернее, на PyQt, если быть точным.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
07.07.2025, 16:22

Размещение своего виджета на форме
Добрый вечер, Пишу интерфейс для своей программы без использования средств Qt Designer и вот...

Установка фона виджета
Доброго времени суток, господа! Подскажите новичку, как правильно установить фон виджета из файла...

Qt. Управление сеансом и нестандартный вид окна виджета.
Доброго времени суток! Возникла пара вопросов. Вопрос 1 Мне необходимо, чтобы приложение,...

Перемещение виджета... начинающий
задание: есть два окна на одном кнопки up,down,left,right в другом окне кнопка....по нажатию кнопок...

Прорисовка виджета
Вобщем хочется зделать своё появление QDialog, пробовал вариант QWidget::showEvent(), но вначале...


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

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
Запустил конкурс "тем и промптов для текстовых квестов созданных почти чисто ИИ"
Adler 06.10.2026
Всем привет! За последние три-четыре дня я создал более 16 текстовых квестовых игр используя преимущественно по одному запросу к ИИ на игру. Мне так понравилось смотреть все ветки/ сцены во всех. . .
ИИ не может найти нужный язык в списке
Supersumestria 05.10.2026
Я ему даю вот такое изображение и прошу найти и подчеркнуть немецкий язык. Возвращает он вот это: https:/ / i. **********/ vqBWLe2. png Нужную строчку в 3й колонке просто выдумал. . Это. . .
Новая последняя моя музыка в SUNO
zorxor 05.10.2026
Здравствуйте, дорогие мои друзья! С большой радостью я хотел бы представить вам свою новую последнею музыку, которую сгенерировала мне по моей просьбе нейросеть SUNO. С уважением, zorxor. Это. . .
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js. В помощники взял Яндекс-Алису. Было создано три зала на разные интересы. исторические и ретро сериал Хичкок. . .
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru