Форум программистов, компьютерный форум, киберфорум
Go (Golang)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
1 / 1 / 0
Регистрация: 03.09.2018
Сообщений: 71

Как правильно обновлять таблицу динамически

14.12.2019, 23:20. Показов 1329. Ответов 0
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Проблема заключается в следующем: имеется таблица, в которую периодически добавляются данные, необходимо вывести их сразу как только они появляются. Данную проблему можно решить через qApp.ProcessEvents(core.QEventLoop__AllE vents), но наксколько я понял это являетс плохим стилем и многие советуют использовать datachanged, но при его использовании вылетает множество ошибок (в коде time.Sleep добавлено, чтобы имитировать задержку при выводе строчек в таблице). Возможно кто-то сталкивался с такой проблемой, если так тто прошу поделиться опытом, спасибо.

ошибки
Кликните здесь для просмотра всего текста

QSocketNotifier: Can only be used with threads started with QThread
panic: runtime error: invalid memory address or nil pointer dereference
[signal SIGSEGV: segmentation violation code=0x1 addr=0x0 pc=0xbadaf3]

goroutine 1 [running, locked to thread]:
main.fillTable(0xc0000102b0, 0xc00000e028)
/home/alex/GO_ALL/QT/test/progressBar.go:76 +0x113
main.main.func1(0xf28200)
/home/alex/GO_ALL/QT/test/progressBar.go:35 +0x33
github.com/therecipe/qt/widgets.callbackQAbstractButton_Clicked( 0x37867e0, 0x10dc100)
/home/alex/GO_ALL/outside_library/src/github.com/therecipe/qt/widgets/widgets.go:245 +0x73
github.com/therecipe/qt/widgets._cgoexpwrap_febc59e23d52_callbac kQAbstractButton_Clicked(0x37867e0, 0x398c900)
_cgo_gotypes.go:108443 +0x34
github.com/therecipe/qt/widgets._Cfunc_QWidget_MouseReleaseEvent Default(0x37867e0, 0x7fff12ba5d90)
_cgo_gotypes.go:103970 +0x41
github.com/therecipe/qt/widgets.(*QWidget).MouseReleaseEventDefa ult.func1(0x37867e0, 0x7fff12ba5d90)
/home/alex/GO_ALL/outside_library/src/github.com/therecipe/qt/widgets/widgets.go:105215 +0x8f
github.com/therecipe/qt/widgets.(*QWidget).MouseReleaseEventDefa ult(0xc000095ab8, 0x1151320, 0xc00000f3c0)
/home/alex/GO_ALL/outside_library/src/github.com/therecipe/qt/widgets/widgets.go:105215 +0x70
github.com/therecipe/qt/widgets.callbackQWidget_MouseReleaseEven t(0x37867e0, 0x7fff12ba5d90)
/home/alex/GO_ALL/outside_library/src/github.com/therecipe/qt/widgets/widgets.go:105181 +0xd7
github.com/therecipe/qt/widgets._cgoexpwrap_febc59e23d52_callbac kQWidget_MouseReleaseEvent(0x37867e0, 0x7fff12ba5d90)
_cgo_gotypes.go:130912 +0x35
github.com/therecipe/qt/widgets._Cfunc_QWidget_EventDefault(0x37 867e0, 0x7fff12ba5d90, 0x0)
_cgo_gotypes.go:102583 +0x4a
github.com/therecipe/qt/widgets.(*QWidget).EventDefault.func1(0x 37867e0, 0x7fff12ba5d90, 0x7fff12ba5d90)
/home/alex/GO_ALL/outside_library/src/github.com/therecipe/qt/widgets/widgets.go:103831 +0x8f
github.com/therecipe/qt/widgets.(*QWidget).EventDefault(0xc00009 5d30, 0x11502e0, 0xc00000f3b8, 0x5)
/home/alex/GO_ALL/outside_library/src/github.com/therecipe/qt/widgets/widgets.go:103831 +0x74
github.com/therecipe/qt/widgets.callbackQWidget_Event(0x37867e0, 0x7fff12ba5d90, 0x10dc158)
/home/alex/GO_ALL/outside_library/src/github.com/therecipe/qt/widgets/widgets.go:103797 +0xd7
github.com/therecipe/qt/widgets._cgoexpwrap_febc59e23d52_callbac kQWidget_Event(0x37867e0, 0x7fff12ba5d90, 0x0)
_cgo_gotypes.go:130646 +0x35
github.com/therecipe/qt/widgets._Cfunc_QApplication_QApplication _Exec(0x0)
_cgo_gotypes.go:9039 +0x49
github.com/therecipe/qt/widgets.(*QApplication).Exec(0xc00000e02 8, 0xc00000c080)
/home/alex/GO_ALL/outside_library/src/github.com/therecipe/qt/widgets/widgets.go:9736 +0x22
main.main()
/home/alex/GO_ALL/QT/test/progressBar.go:40 +0x27f
exit status 2




Go
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
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
package main
 
import (
    "os"
    "strconv"
    "time"
 
    "github.com/therecipe/qt/core"
 
    "github.com/therecipe/qt/widgets"
)
 
func main() {
    
    qApp := widgets.NewQApplication(len(os.Args), os.Args)
    
    window := widgets.NewQMainWindow(nil, 0)
    widget := widgets.NewQWidget(nil, 0)
    widget.SetLayout(widgets.NewQVBoxLayout())
    window.SetCentralWidget(widget)
    window.SetMinimumSize2(500, 500)
    window.SetWindowTitle("beta version")
 
    prbar := widgets.NewQProgressBar(nil)
    prbar.SetMinimum(0)
    prbar.SetMaximum(100)
    widget.Layout().AddWidget(prbar)
    button := widgets.NewQPushButton2("pbar", nil)
    widget.Layout().AddWidget(button)
    table := formTable(widget)
 
         
    button.ConnectClicked(func(bool) {
 
        fillTable(table, qApp)
    })
    //table
 
    window.Show()
    qApp.Exec()
}
 
func startPbar(prbar *widgets.QProgressBar) {
    for i := 0; i < 121; i++ {
        prbar.SetValue(i)
        time.Sleep(100 * time.Millisecond)
    }
}
 
func formTable(widget *widgets.QWidget) (table *widgets.QTableWidget) {
    table = widgets.NewQTableWidget(nil)
    table.SetColumnCount(2)
    table.SetRowCount(1)
    fill := widgets.NewQTableWidgetItem2("Столбец 1", 0)
    table.SetItem(0, 0, fill)
    fill = widgets.NewQTableWidgetItem2("Столбец 2", 0)
    table.SetItem(0, 1, fill)
    table.HorizontalHeader().SetSectionResizeMode2(0, widgets.QHeaderView__ResizeToContents)
    table.HorizontalHeader().SetSectionResizeMode2(1, widgets.QHeaderView__ResizeToContents)
    widget.Layout().AddWidget(table)
    return table
}
 
func fillTable(table *widgets.QTableWidget, qApp *widgets.QApplication) {
    var k int = 1
    for i := 0; i < 6; i++ {
        if k <= table.RowCount() {
            table.SetRowCount(table.RowCount() + 1)
        }
        fill1 := widgets.NewQTableWidgetItem2(strconv.Itoa(i), 0)
        fill2 := widgets.NewQTableWidgetItem2(strconv.Itoa(i*i), 0)
        table.SetItem(k, 0, fill1)
        table.SetItem(k, 1, fill2)
        var topLeft core.QModelIndex_ITF
        var bottomRight core.QModelIndex_ITF
        topLeft.QModelIndex_PTR().Sibling(i, 1)
        bottomRight.QModelIndex_PTR().Sibling(i, 1)
 
        table.DataChanged(topLeft, bottomRight, nil)
        // qApp.ProcessEvents(core.QEventLoop__AllEvents)
        k++
        time.Sleep(100 * time.Millisecond)
    }
}
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
14.12.2019, 23:20
Ответы с готовыми решениями:

Как динамически обновлять элементы?
Как динамически обновлять элементы, например progressbar или listview?

Как по клику кнопки обновлять содержимое динамически создаваемого ДатаГрида?
Всем доброго времени суток! Прошу не забрасывать сразу яйцами и помидорами!!! Короче, пытаюсь начинать кой-какое офисное приложение и...

Как НЕ обновлять Сводную Таблицу
Люди, здравствуйте. Сейчас работаю в вба со сводной таблицей. Большой. Поэтому она долго обновляется каждый раз, когда я что-то меняю....

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
14.12.2019, 23:20
Помогаю со студенческими работами здесь

Как правильно обновлять приложение ?
Доброго времени суток! У меня есть приложение на C++, но столкнулся с такой проблемой, как правильно обновлять приложение ? Сейчас...

Combobox и TableAdapter как обновлять таблицу
Здравствуйте. Помогите с моей проблемой. Есть база в акцесе с кучкой подобных таблиц в которые данные забивает пользователь из...

Как обновлять таблицу с запросом на форме
У меня запрос который вычисляет остатки. Находится он на главной форме. Как его обновлять, чтоб корректно отображать данные при приходе...

Как правильно обновлять картинку captchI ?
в php коде есть стандартная функция автоматического создания рандомной картинки из заданных букв и чисел при нажатии на регистрацию...

Как правильно обновлять свои OCX
При добавлении в свою OCX MyOcx.ocx новых контролов при последующей попытке подцепить ее через Refrences к новому проекту часто получаю...


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

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru