Форум программистов, компьютерный форум, киберфорум
Python: GUI, графика
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.58/141: Рейтинг темы: голосов - 141, средняя оценка - 4.58
 Аватар для Simply me
244 / 37 / 8
Регистрация: 05.05.2012
Сообщений: 521

Pyqt. Класс QTableView

23.12.2018, 18:01. Показов 29625. Ответов 60
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день!

Напишите, пожалуйста, примеры использования QTableview: указание количества строк/столбцов, заголовки столбцов, заполнение значениями. Вроде надо с помощью QAbstractItemModel. Гуглится в основном про QTableWidget.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
23.12.2018, 18:01
Ответы с готовыми решениями:

PyQt, редактируемый QTableView и автодобавление строк
Есть таблица, представляется классами myModel и myView. Не давно добавил возможность редактирования, с существующими значениями все хорошо,...

PYQT Вставить в ячейку QTableView произвольный виджет
Здравствуйте. Никак не могу понять, как вставить свой виджет отображения в ячейку QTableView. Есть назначение делегатов, но это...

Разница между PyQT 5 и PyQT 6
Добрый день, форумчане. Прошел тут курс всеми вами любимого автора, познакомился с GUI TKinter, и по вашим советам решил освоить PyQT. ...

60
963 / 718 / 276
Регистрация: 10.12.2016
Сообщений: 1,764
24.12.2018, 16:23
qtablewidget = qtableview + qstandarditemmodel
http://itnotesblog.ru/note.php?id=159
http://easy-qt.blogspot.com/20... eview.html

Добавлено через 2 часа 5 минут
rowСount, columnCount , data - относится к модели, а не к вьюхе
если хотите на Qt делать - читайте примеры по Qt - их очень много
для вашего случая https://evileg.com/ru/post/158/
1
 Аватар для Simply me
244 / 37 / 8
Регистрация: 05.05.2012
Сообщений: 521
25.12.2018, 18:05  [ТС]
Спасибо. Только все примеры на c++.

Добавлено через 1 минуту
Ну хотя на питоне идея примерно та же, только синтаксис отличается.
0
Эксперт Python
 Аватар для dondublon
4652 / 2072 / 366
Регистрация: 17.03.2012
Сообщений: 10,182
Записей в блоге: 6
26.12.2018, 16:33
Для ознакомления рекомендую всем https://habr.com/post/171443/ .
4
963 / 718 / 276
Регистрация: 10.12.2016
Сообщений: 1,764
26.12.2018, 17:53
необходимый минимум знаний
2
 Аватар для Simply me
244 / 37 / 8
Регистрация: 05.05.2012
Сообщений: 521
26.12.2018, 18:50  [ТС]
А скажите, пожалуйста, почему из-за этой строчки
Python
1
NpTable = QtWidgets.QTableView()
не появляется окошко? И пишет Process finished with exit code -1073740791 (0xC0000409). Если ее закомментить, окошко появляется. И exit code = 0. Модуль QtWidjets импортировала. Но он черный. А остальные импортированные модули подсвечены серым. Надо, видимо, передать в скобочках parent. Не знаю, какую переменную. Брала из книжки. Там пустые скобки. По смыслу туда надо передать экземпляр класса окна.
0
963 / 718 / 276
Регистрация: 10.12.2016
Сообщений: 1,764
26.12.2018, 19:33
покажите весь код
0
 Аватар для Simply me
244 / 37 / 8
Регистрация: 05.05.2012
Сообщений: 521
26.12.2018, 19:47  [ТС]
Python
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
import sys
# Импорт numpy
import numpy
# Импорт интерфейса
from test import *
 
from PyQt5 import QtCore, QtGui, QtWidgets
 
# Массив значений
mass = numpy.array([[1, 2, 3], [4, 5, 6], [7, 8, 9], [10, 11, 12], [13, 14, 15]], float)
# Создание таблицы
NpTable = QtWidgets.QTableView()
 
# Окно
class MyWin(QtWidgets.QMainWindow):
    def __init__(self, parent=None):
        QtWidgets.QWidget.__init__(self, parent)
        self.ui = Ui_MainWindow()
        self.ui.setupUi(self)
 
        #Событие нажатия на кнопки
        self.ui.SaveArrBttn.clicked.connect(self.SaveArrayInFile)
 
    # Функции, выполняющиеся при нажатии на кнопки
    def SaveArrayInFile(self):            # сохранение массива в текстовый файл
        pass
 
if __name__ == "__main__":
    app = QtWidgets.QApplication(sys.argv)
    myapp = MyWin()
    myapp.setWindowTitle("Таблица и график") #Заголовок окна
    # Надпись на кнопке
    myapp.ui.SaveArrBttn.setText("Сохранить массив в файл")
  
    # Размеры окна и кнопки
    myapp.setFixedWidth(900)
    myapp.ui.SaveArrBttn.setFixedWidth(250)
    myapp.show()
    sys.exit(app.exec_())
0
963 / 718 / 276
Регистрация: 10.12.2016
Сообщений: 1,764
26.12.2018, 22:20
Bash
1
2
QWidget: Must construct a QApplication before a QWidget
Abort trap: 6
вы создаете экземпляр класса вне QApplication так нельзя
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
import sys
# Импорт numpy
import numpy
# Импорт интерфейса
from PyQt5 import QtCore, QtGui, QtWidgets
 
# Массив значений
mass = numpy.array([[1, 2, 3], [4, 5, 6], [7, 8, 9], [10, 11, 12], [13, 14, 15]], float)
 
if __name__ == "__main__":
    app = QtWidgets.QApplication(sys.argv)
    NpTable = QtWidgets.QTableView() 
 
    NpTable.show()
    sys.exit(app.exec_())
1
 Аватар для Simply me
244 / 37 / 8
Регистрация: 05.05.2012
Сообщений: 521
27.12.2018, 04:25  [ТС]
Понятно. Спасибо!
0
 Аватар для Simply me
244 / 37 / 8
Регистрация: 05.05.2012
Сообщений: 521
28.12.2018, 17:56  [ТС]
Посмотрите еще, пожалуйста. Пока не очень получается. И дебажить в pycharm не получается.

Беру пример из книжки и адаптирую под свою задачу. Концепцию "модель-представление" поняла более-менее. Заполняю данными модель NPTableModel. Почему-то когда запускаю, у таблицы только заголовки выводятся. Пыталась посмотреть значение объекта item1 в консоли. Это просто его адрес.

item1
<PyQt5.QtGui.QStandardItem object at 0x07023DF0>




Python
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
import sys
# Импорт numpy
import numpy
# Импорт интерфейса
from test import *
 
from PyQt5 import QtCore, QtGui, QtWidgets
 
# Массив значений
mass = numpy.array([[1, 2, 3, 4, 5], [6, 7, 8, 9, 10], [11, 12, 13, 14, 15]], float)
 
# Окно
class MyWin(QtWidgets.QMainWindow):
    def __init__(self, parent=None):
        QtWidgets.QWidget.__init__(self, parent)
        self.ui = Ui_MainWindow()
        self.ui.setupUi(self)
 
   
if __name__ == "__main__":
    app = QtWidgets.QApplication(sys.argv)
    myapp = MyWin()
    myapp.setWindowTitle("Таблица") #Заголовок окна
    # Создание таблицы
    NpTable = QtWidgets.QTableView(parent=myapp)
    # Создание модели для таблицы
    NpTableModel = QtGui.QStandardItemModel(parent=myapp)
    # Заполнение модели
    for row in range(0, 3):
        item1 = QtGui.QStandardItem(mass[row, 0])
        item2 = QtGui.QStandardItem(mass[row, 1])
        item3 = QtGui.QStandardItem(mass[row, 2])
        item4 = QtGui.QStandardItem(mass[row, 3])
        item5 = QtGui.QStandardItem(mass[row, 4])
        NpTableModel.appendRow([item1, item2, item3, item4, item5])
    NpTableModel.setHorizontalHeaderLabels(['Column1', 'Column2', 'Columln3', 'Column4', 'Column5'])
    # Передача заполненной модели в таблицу
    NpTable.setModel(NpTableModel)
 
    # Размеры окна и таблицы
    myapp.setFixedWidth(900)
    NpTable.setFixedWidth(520)
    NpTable.setFixedHeight(150)
    NpTable.show()
    myapp.show()
    sys.exit(app.exec_())
0
963 / 718 / 276
Регистрация: 10.12.2016
Сообщений: 1,764
28.12.2018, 20:34
в Qt все завязано на классы и сигнал-слот
темплейт такой
Python
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
from PyQt5.QtWidgets import QApplication, QTableView, QWidget, QGridLayout, QPushButton
from PyQt5.QtGui import QStandardItemModel, QStandardItem
 
class Table(QWidget):
    def __init__(self,parent=None):
        super().__init__()
        self.model = QStandardItemModel()
        self.table = QTableView()
        self.table.setModel(self.model)
        self.btnLoad = QPushButton("load")
        self.btnLoad.clicked.connect(self.load_data)
        self.grid = QGridLayout(self)
        self.grid.addWidget(self.table,0,0,4,4)
        self.grid.addWidget(self.btnLoad,4,0,1,1)
        
    def load_data(self):
        l = [[i + j  for i in range(3)] for j in range(4)]
        self.model.setRowCount(4)
        self.model.setColumnCount(3)
        for i in range(4):
            for j in range(3):
                item = QStandardItem(str(l[i][j]))
                self.model.setItem(i,j,item)
        
        
        
if __name__=="__main__":
    app = QApplication([])
    w = Table()
    w.show()
    app.exec_()
1
 Аватар для Simply me
244 / 37 / 8
Регистрация: 05.05.2012
Сообщений: 521
29.12.2018, 13:12  [ТС]
Спасибо!
0
963 / 718 / 276
Регистрация: 10.12.2016
Сообщений: 1,764
29.12.2018, 16:43
немного развил тему
Python
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
from PyQt5.QtWidgets import QApplication, QTableView, QWidget, QGridLayout, QPushButton, \
QTreeView, QListView
from PyQt5.QtGui import QStandardItemModel, QStandardItem
 
class Table(QWidget):
    def __init__(self,parent=None):
        super().__init__()
        self.model = QStandardItemModel()
        self.table = QTableView()
        self.table.setModel(self.model)
        self.table.horizontalHeader().setSectionResizeMode(1)
        self.btnLoad = QPushButton("Load")
        self.btnClear = QPushButton("Clear")
        self.btnGet = QPushButton('Get')
        self.btnLoad.clicked.connect(self.load_data)
        self.btnClear.clicked.connect(self.on_clear)
        self.btnGet.clicked.connect(self.get_data)
        grid = QGridLayout(self)
        grid.setContentsMargins(1,1,1,1)
        grid.addWidget(self.table,0,0,4,4)
        grid.addWidget(self.btnLoad,4,0,1,1)
        grid.addWidget(self.btnClear,4,1,1,1)
        grid.addWidget(self.btnGet,4,3,1,1)
        self.rows = 2
        self.cols = 3
        
    def load_data(self):
        self.model.setRowCount(self.rows)
        self.model.setColumnCount(self.cols)
        for row in range(self.rows):
            for col in range(self.cols):
                item = QStandardItem(str(row)+':'+str(col))
                self.model.setItem(row,col,item)
        self.rows += 1
        self.cols += 1
            
    def on_clear(self):
        self.model.clear()
        self.rows = 2
        self.cols = 3
    
    def get_data(self):
        rows = self.model.rowCount()
        cols = self.model.columnCount()
        out = [[self.model.item(i,j).text() for j in range(cols)] for i in range(rows)]
        print(out)
            
            
        
if __name__=="__main__":
    app = QApplication([])
    w = Table()
    w.show()
    app.exec_()
1
 Аватар для Simply me
244 / 37 / 8
Регистрация: 05.05.2012
Сообщений: 521
29.12.2018, 19:57  [ТС]
vic5710, круто у Вас получается, спасибо! Просто тут много непонятного мне кода. Хочу сама научиться. Я всё-таки не понимаю, почему мой исходный код не работал. И мне нужно, чтобы таблица заполнялась значениями из numpy массива. Дальше мне нужно будет, чтобы значения одного из столбцов пересчитывались через значения другого, чтобы по двум выделенным строился график, чтобы один из столбцов заполнялся из списка (с использованием делегатов) и тд. А я всё еще не совсем понимаю, как таблицу заполнить.
0
963 / 718 / 276
Регистрация: 10.12.2016
Сообщений: 1,764
29.12.2018, 21:34

Не по теме:

я в Qt пишу со времен Qt3, так что лишних движений не делаю :senor:
в питоне у меня внучка пишет
мне проще показать как надо чем объяснить как не надо


таблица - отображений модели данных. то есть данные -> преобразование данных (по дефолту все в текст)-> модель -> вьюха
извлечение данных - модель -> преобразование данных (по дефолту все текст) -> данные
вам надо работать с данными, а в модель тока заносить, ну еще можно во вьюхе редактировать
типа так
Python
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
import numpy as np
from PyQt5.QtWidgets import QApplication, QTableView, QWidget, QGridLayout, QPushButton, \
QTreeView, QListView
from PyQt5.QtGui import QStandardItemModel, QStandardItem
 
mass = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9], [10, 11, 12], [13, 14, 15]], float)
 
class Table(QWidget):
    def __init__(self,data=None,parent = None):
        super().__init__()
        self.model = QStandardItemModel()
        self.table = QTableView()
        self.table.setModel(self.model)
        self.table.horizontalHeader().setSectionResizeMode(1)
        self.btnLoad = QPushButton("Load")
        self.btnCalc = QPushButton("Calc")
        self.btnGet = QPushButton('Get')
        self.btnLoad.clicked.connect(self.load_data)
        self.btnCalc.clicked.connect(self.calc)
        self.btnGet.clicked.connect(self.get_data)
        grid = QGridLayout(self)
        grid.setContentsMargins(1,1,1,1)
        grid.addWidget(self.table,0,0,4,4)
        grid.addWidget(self.btnLoad,4,0,1,1)
        grid.addWidget(self.btnCalc,4,1,1,1)
        grid.addWidget(self.btnGet,4,3,1,1)
        self.data = data
        
    def load_data(self):
        rows = len(self.data)
        cols = len(self.data[0])
        for row in range(rows):
            for col in range(cols):
                item = QStandardItem(str(self.data[row][col]))
                self.model.setItem(row,col,item)
            
    def calc(self):
        for i in range(len(self.data[0])):
            self.data[0][i] *= 100
            self.load_data()
            
    
    def get_data(self):
        rows = self.model.rowCount()
        cols = self.model.columnCount()
        out = [[self.model.item(i,j).text() for j in range(cols)] for i in range(rows)]
        print(out)
            
                
if __name__=="__main__":
    app = QApplication([])
    w = Table(mass)
    w.show()
    app.exec_()
Добавлено через 8 минут
Цитата Сообщение от Simply me Посмотреть сообщение
Дальше мне нужно будет, чтобы значения одного из столбцов пересчитывались через значения другого, чтобы по двум выделенным строился график, чтобы один из столбцов заполнялся из списка (с использованием делегатов) и тд. А я всё еще не совсем понимаю, как таблицу заполнить.
все реально я QTabWidget рекомендую для начала со вкладками
1
 Аватар для Simply me
244 / 37 / 8
Регистрация: 05.05.2012
Сообщений: 521
30.12.2018, 10:06  [ТС]
Спасибо, вроде понятнее)
0
963 / 718 / 276
Регистрация: 10.12.2016
Сообщений: 1,764
30.12.2018, 12:32
Цитата Сообщение от Simply me Посмотреть сообщение
А я всё еще не совсем понимаю, как таблицу заполнить.
я вроде понял где вас клинит
Python
1
2
3
4
5
6
7
8
9
    def load_data(self):
        self.model.clear()
        rows = len(self.data)
        cols = len(self.data[0])
        for row in range(rows):
            for col in range(cols):
                item = QStandardItem() #1
                item.setText(str(round(self.data[row][col],3))) #2
                self.model.setItem(row,col,item) #3
1
963 / 718 / 276
Регистрация: 10.12.2016
Сообщений: 1,764
02.01.2019, 05:35
чота в новый год не спалось, наваял прогу для работы с numpy,

Не по теме:

правда был слегка нетрезв


Python
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
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
import numpy as np
 
from PyQt5.QtWidgets import (QApplication, QTableView, QTreeView, 
QMainWindow, QWidget, QGridLayout, QPushButton,QMenu)
from PyQt5.QtCore import (Qt,QAbstractTableModel,QModelIndex)
 
         
class NpModel(QAbstractTableModel):
    def __init__(self, data = np.array([[]])):
        super().__init__()
        self.npdata = data
        
    def rowCount(self,index=QModelIndex()):
        return len(self.npdata)
        
    def columnCount(self,index=QModelIndex()):
        return len(self.npdata[0])
    
    def data(self,index,role):
        if not index.isValid() or role != Qt.DisplayRole: 
            return None
        val = self.npdata[index.row()][index.column()]
        return str(round(val,4))
    
    def headerData(self,section,orientation,role):
        if role != Qt.DisplayRole: return None
        if orientation == Qt.Vertical:
            return 'Строка ' + str(section)
        else: return 'Столбец ' + str(section)
 
    def set(self,arr=np.array([[]])):
        self.beginResetModel()
        self.npdata = arr
        self.endResetModel()
        self.layoutChanged.emit()
    
    def get(self):
        return self.npdata
 
class NpTable(QMainWindow):
    def __init__(self,data=np.array([[]]),parent = None):
        super().__init__()
        self.model = NpModel()
        self.view = QTableView()
        self.view.setModel(self.model)
        self.view.horizontalHeader().setSectionResizeMode(1)
        self.btnLoad = QPushButton("Reload")
        self.btnCalc = QPushButton("Calc")
        self.btnGet = QPushButton('Get')
        self.btnLoad.clicked.connect(self.reload)
        self.btnCalc.clicked.connect(self.calc)
        self.btnGet.clicked.connect(self.get_data)
        wgt = QWidget()
        grid = QGridLayout(wgt)
        grid.setContentsMargins(0,0,0,0)
        grid.addWidget(self.view,0,0,4,4)
        grid.addWidget(self.btnLoad,4,0,1,1)
        grid.addWidget(self.btnCalc,4,1,1,1)
        grid.addWidget(self.btnGet,4,3,1,1)
        self.setCentralWidget(wgt)
        self.load(data)
        
    def reload(self):
        self.model.set(self.data.copy())
        
    def load(self,data=np.array([[]])):
        self.data = data
        self.model.set(data.copy())
        
    def calc(self):
        rows = self.model.rowCount()
        cols = self.model.columnCount()
        for i in range(rows):
            for j in range(cols):
                self.model.npdata[i][j] /=  (j + 2)
        self.model.layoutChanged.emit()
    
    def get_data(self):
        print(repr(self.model.get()))
        
    def contextMenuEvent(self,event):
        indexes = [(i.row(),i.column()) for i in self.view.selectionModel().selectedIndexes()]
        self.statusBar().showMessage(str(indexes))
        mnu = QMenu()
        mnu.addAction('x10').setObjectName('calc10')
        mnu.addAction('x100').setObjectName('calc100')
        pos =  self.view.mapToGlobal(event.pos())
        ret = mnu.exec_(pos)
        if ret:
            num = 0 
            obj = ret.objectName()
            if obj == 'calc10': num = 10
            elif obj == 'calc100': num = 100
            if num:
                for ind in indexes: self.model.npdata[ind] *= num
        index = self.model.index(-1,-1)
        self.view.setCurrentIndex(index)
        self.model.layoutChanged.emit()
        self.statusBar().showMessage('')
    
 
mass = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9], [10, 11, 12], [13, 14, 15]], float)
 
if __name__=="__main__":
    app = QApplication([])
    w = NpTable()
    w.load(mass)
    w.resize(600,400)
    w.move(0,0)
    w.show()
    app.exec_()
2
 Аватар для Simply me
244 / 37 / 8
Регистрация: 05.05.2012
Сообщений: 521
02.01.2019, 07:07  [ТС]
Спасибо! С наступившим!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
02.01.2019, 07:07
Помогаю со студенческими работами здесь

Из QT в PyQt
Здравствуйте, подскажите правильно ли у меня получился перевод из QT в PyQt? Интересует именно выполнение класса QCoreApplication и...

PyQt, Qt и ScrollArea
Доброй ночи. В этот раз кода не будет, так как клин. Из русскоязычных мануалов по PyQt только Прохоренок, которого все хаят (а...

PyQt + PyCharm
Как подключить PyQT5 к pycharm 4.5.3 ? python 3.4

PyQt и Spyder 3
Доброго времени суток! Возyикает проблема после установки PyQt - перестает запускаться Spyder 3, никаких ошибок, ничего. Запускаешь IDE,...

Paint pyqt
Добрый вечер, помогите разобраться с кодом я в Python (pyqt, Desinger) новичок. Можете обяснить по подробнее с &quot;Class Canvas&quot;...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru