Форум программистов, компьютерный форум, киберфорум
C++ Qt
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 5.00/9: Рейтинг темы: голосов - 9, средняя оценка - 5.00
5 / 5 / 0
Регистрация: 01.03.2022
Сообщений: 145

Масштабирование frame и текста внутри

18.05.2022, 23:44. Показов 2275. Ответов 21
Метки c++, qt (Все метки)

Студворк — интернет-сервис помощи студентам
У каждой компании есть заметки, заметки хранятся в БД, в виде таблицы с двумя полями - id компании и собственно сам текст заметки. Нажимаешь на нужную компанию, её заметки подгружаются и выводятся в виде динамически созданных фреймов с кнопкой удаления и самим текстом. Вот код самого обновления:
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
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
dynamicFrame *frame = new dynamicFrame(this);
        frame->setStyleSheet("background-color:rgb(47,49,54);"
                             "color:white;"
                             "border-width:1px;"
                             "border-radius:8px;"
                             "border-color: black;");
        frame->setSizePolicy(QSizePolicy::Expanding,QSizePolicy::Fixed);
        QHBoxLayout *lay = new QHBoxLayout(frame);
 
        dynamicText *text = new dynamicText(frame);
        text->setReadOnly(true);
        text->setTextInteractionFlags(Qt::NoTextInteraction);
        text->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Minimum);
        text->setFont(defaultfont);
 
        dynamicLabel *date = new dynamicLabel(frame);
        date->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed);
        date->setFont(defaultfont);
 
        dynamicButton *button = new dynamicButton(frame);
        button->setID(query.value(rec.indexOf("id")).toString());
        button->setSizePolicy(QSizePolicy::Fixed,QSizePolicy::Fixed);
        button->setFixedSize(24,24);
        button->setStyleSheet("QPushButton{color:black;"
                              "border-style: solid;"
                              "border-width:1px;"
                              "border-radius:3px;"
                              "border-color: black;"
                              "max-width:24px;"
                              "max-height:24px;"
                              "min-width:24px;"
                              "min-height:24px;"
                              "color:black;"
                              "background-color:rgb(255, 0, 0)"
                              "}"
 
                              "QPushButton:hover{ color:black;"
                              "border-style: solid;"
                              "border-width:1px;"
                              "border-radius:3px;"
                              "border-color: black;"
                              "max-width:24px;"
                              "max-height:24px;"
                              "min-width:24px;"
                              "min-height:24px;"
                              "color:black;"
                              "background-color:rgb(145, 0, 0);"
                              "}");
        button->setText("X");
        connect(button, SIGNAL(clicked()), this, SLOT(deleteDynamicButton_deleteNote()));
 
        text->setText(query.value(rec.indexOf("text")).toString());
        date->setText(query.value(rec.indexOf("date")).toString());
        QString s = text->toPlainText();
        QFontMetrics fm(text->font());
        int pixelsWide = fm.horizontalAdvance(s); //ширина текста
        int rowCount = pixelsWide/200; //кол-во строк
        if (rowCount == 0){ //если 0 - фиксированные 30
            text->setFixedHeight(30);
        } else{ //если больше 0 = формула
            int height = rowCount * 22 + 8;
            text->setFixedHeight(height);
        }
        text->setStyleSheet("background-color: transparent");
        text->setStyleSheet("border:0px solid black");
        lay->addWidget(text);
        lay->addWidget(date);
        lay->addWidget(button);
        ui->verticalLayout_11->addWidget(frame);
    }
Вот так это выглядит:


Если вы обратили внимание, в коде обновления есть некая "формула", которая являлась временным решением, она подстраивала размер фрейма под размер текста. (результат видно на скрине выше, что занималась она этим, грубо говоря, некорректно). Мне нужно каким-то образом, при обновлении сразу выставлять фрейму идеальный размер. В коде используется шрифт "defaultFont", вот он:
C++ (Qt)
1
QFont defaultfont = QFont("Segoe UI",12,2);
Плюсом ко всему, мне нужно менять размер этого фрейма при масштабировании самого окна, чтобы не было такого:


Какими средствами можно подобную штуку реализовать?
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
18.05.2022, 23:44
Ответы с готовыми решениями:

Масштабирование текста внутри button
Как можно масштабировать текст внутри button, при изменении размеров самой кнопки? только без textblock. Хочу через binding, но к чему...

картинка типа frame, c внутри картинкой
как сделать такую вещь правильней было? при наведении картинка фрайма меняется. картинку фрайма я бакграундом ставлю блоку, внутри...

Как обработать Label-ы внутри Frame-ов?
Имеем Frame1 и Frame2, в каждом из которых находится массив Label1. Frame1 имеет Label1(0) Frame2 имеет Label1(1). При...

21
Эксперт .NET
 Аватар для insite2012
5548 / 4311 / 1218
Регистрация: 12.10.2013
Сообщений: 12,371
Записей в блоге: 2
19.05.2022, 05:05
Цитата Сообщение от PrOsTo_NiK_ Посмотреть сообщение
Какими средствами можно подобную штуку реализовать?
PrOsTo_NiK_, на мой взгляд, у вас слишком нетривиальные задачи, которые простыми виджетами не решить (вернее, решить то можно, с написанием тонны своего кода и стилей). Виджеты, как ни крути, не особо подходят для кастомизации. Вы можете попробовать посмотреть в сторону создания интерфейса на Qml/QtQuick, там намного больше возможностей для кастомизации и можно сделать практически все что угодно (вплоть до включения 3D обьектов в 2D отображение).
1
Эксперт .NET
 Аватар для insite2012
5548 / 4311 / 1218
Регистрация: 12.10.2013
Сообщений: 12,371
Записей в блоге: 2
19.05.2022, 05:20
Вот набросал буквально за 2 минуты. Размер каждого фрейма, обрамляющего текст масштабируется в зависимости от размера самого текста. Конечно, зная точно задачу и немого поэкспериментировав, можно сделать намного больше, это всего лишь простой пример.
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
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
import QtQuick 2.12
import QtQuick.Window 2.12
import QtQuick.Layouts 1.12
import QtQuick.Controls 2.12
 
Window {
    width: 500
    height: 400
    visible: true
    title: qsTr("Hello World")
    color: "gray";
    ColumnLayout{
        anchors.fill: parent;
        anchors.margins: 10;
        RowLayout{
            Layout.fillWidth: true;
            Frame{
                Layout.fillWidth: true;
                TextArea{
                    anchors.fill: parent;
                    color: "white";
                    font.pointSize: 12;
                    text: "nfhvkkemmnn bfhfkkkfkkf\nbfhyyvhhwb\nvdggfll hgybdgt";
                }
            }
            RowLayout{
                Layout.fillHeight: true;
                Text{
                    text: "25.03.2001";
                    font.pointSize: 10;
                    color: "white";
                }
                ToolButton{
                }
            }
        }
        RowLayout{
            Layout.fillWidth: true;
            Frame{
                Layout.fillWidth: true;
                TextArea{
                    anchors.fill: parent;
                    color: "white";
                    font.pointSize: 12;
                    text: "nfhvkkemmnn bfhfkkkfkkf\nbfhyyvhhwb\nvdggfll hgybdgt\nbbbfhfhfh\nhfyyy";
                }
            }
            RowLayout{
                Layout.fillHeight: true;
                Text{
                    text: "25.03.2001";
                    font.pointSize: 10;
                    color: "white";
                }
                ToolButton{
                }
            }
        }
        RowLayout{
            Layout.fillWidth: true;
            Frame{
                Layout.fillWidth: true;
                TextArea{
                    anchors.fill: parent;
                    color: "white";
                    font.pointSize: 12;
                    text: "nfhvkkemmnn bfhfkkkfkkf";
                }
            }
            RowLayout{
                Layout.fillHeight: true;
                Text{
                    text: "25.03.2001";
                    font.pointSize: 10;
                    color: "white";
                }
                ToolButton{
                }
            }
        }
    }
}
Миниатюры
Масштабирование frame и текста внутри  
1
5 / 5 / 0
Регистрация: 01.03.2022
Сообщений: 145
19.05.2022, 11:48  [ТС]
insite2012, Большое спасибо. Если возьмусь переписать это на QtQuick, нужно будет переписывать интерфейс или можно участок кода QtQuick добавить в Layout, расположенный в обычной .ui форме?
0
Эксперт .NET
 Аватар для insite2012
5548 / 4311 / 1218
Регистрация: 12.10.2013
Сообщений: 12,371
Записей в блоге: 2
19.05.2022, 12:04
Цитата Сообщение от PrOsTo_NiK_ Посмотреть сообщение
нужно будет переписывать интерфейс или можно участок кода QtQuick добавить в Layout, расположенный в обычной .ui форме?
Подход к разработке точно придется менять, но все не так сложно. Я сам раньше считал, что QtQuick хорошо идет для однооконных приложений, но потом плотнее им занялся и понял, что там возможности просто огромные. Конечно, сам qml код в layout вы не добавите, но есть QQuickWidget, в который вы можете поместить ваш участок qml кода, а уже этот виджет разместить где нужно (или использовать как независимое окно)
0
 Аватар для Джон Кофи
266 / 81 / 18
Регистрация: 05.04.2018
Сообщений: 1,102
Записей в блоге: 1
19.05.2022, 17:03
PrOsTo_NiK_, вот такую штуку, как вам скинул insite2012 можно сделать и без QML. Есть же лейауты. Завтра постараюсь скинуть код подобный, если не забуду. Не раз делал похожее:
Для каждой строки свой лейаут, в котором виджеты. И Эти строчные лейауты в основной лэйаут. Так если компоновать, то должно нормально получаться. А по реализации динамических виджетов в кутях... да, боль и жопа день чудесный. Тонна кода. Еще всё обязательно должно быть в скролл ареа.
0
5 / 5 / 0
Регистрация: 01.03.2022
Сообщений: 145
19.05.2022, 17:10  [ТС]
Джон Кофи, большое спасибо, буду ждать Да, скролл ареа общая есть, заметок можно бесконечное множество делать, если Вы об этом. Я сейчас попытался сделать что-то вроде формулы для расчёта высоты фрейма, дабы там умещался textEdit. начал с того, если ограничить масштабирование окна. Даже с этим уже столкнулся с проблемами, если с помощью QFontMetrics узнать длину строки, то оказывается, что строка всегда разной длины выходит, хотя в самом textEdit она занимает одинаковое место. Не совсем понимаю, как это работает, но со строкой "WWWWWWWWWWWWWWW", занимающей максимальный размер строчки в textEdit, QFontMetrics выдает 450, а с такого же размера строкой, но с однообразными символами "l", уже 490. так и выходит, что все мои формулы ломаются в зависимости от введенного текста. Бывает, попаду и будет идеальный размер, а бывает сломаетсяи будет либо пустое пространство, либо же появится ползунок, так как текст не уместился
0
Эксперт .NET
 Аватар для insite2012
5548 / 4311 / 1218
Регистрация: 12.10.2013
Сообщений: 12,371
Записей в блоге: 2
19.05.2022, 18:27
Цитата Сообщение от Джон Кофи Посмотреть сообщение
вот такую штуку, как вам скинул insite2012 можно сделать и без QML.
Такую вполне, но если что то посложнее-будет проблематично. Вот пример: представьте, вам нужно два окна: первое, для ввода данных и авторизации (имя, пароль, кнопка Вход) и второе, уже основное (если авторизация прошла успешно). Что мы делаем на виджетах? Пишем два окна, и связываем их тем или иным способом. Что можно сделать на QML? Написать ОДНО окно, а в нем два фрейма (прямоугольника, если проще, каждый со своим контентом), и в зависимости от условий показываем тот или другой. Все, проблема решена. На виджетах так просто не сменишь один набор виджетов на другой (можно, конечно, я так делал, но в разы сложнее).
0
 Аватар для Джон Кофи
266 / 81 / 18
Регистрация: 05.04.2018
Сообщений: 1,102
Записей в блоге: 1
20.05.2022, 09:26
insite2012, я считаю, что ваш код лучше того, что я сейчас скину. Мне нравится и вашу мысль я поддерживаю. Сам просто на QML не писал никогда и выложу альтернативу. Автор сам решит, что ему больше подходит.

Добавлено через 2 минуты
PrOsTo_NiK_, тут названия из проекта, не обращай внимания, суть поймешь, думаю.
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
    QHBoxLayout *mainLay = new QHBoxLayout;
    QWidget *mainTopValidateW = new QWidget(this);
    mainTopValidateW->setLayout(mainLay);
    //Инициализация услуг
    QVBoxLayout *mainLayHTs = new QVBoxLayout;
    QGroupBox *grBoxHTs = new QGroupBox(this);
    QFrame *containerHTs = new QFrame(this);
    QScrollArea *htsScrollArea = new QScrollArea(this);
    QFormLayout *scrollLayHTs = new QFormLayout;
    QLabel *hTlbl = new QLabel("Категории услуг", this);
 
    grBoxHTs->setLayout(mainLayHTs);
    containerHTs->setLayout(scrollLayHTs);
    htsScrollArea->setWidgetResizable(true);
    htsScrollArea->setWidget(containerHTs);
    mainLayHTs->addWidget(hTlbl);
    mainLayHTs->addWidget(htsScrollArea);
    mainLay->insertWidget(0, grBoxHTs);
 
    grBoxHTs->setAlignment(Qt::AlignLeft);
 
    for(int i(0); i < 25; ++i) {
        QWidget *w = new QWidget(this);
        QHBoxLayout *lay = new QHBoxLayout;
        QPushButton *pb = new QPushButton("button", this);
        QCheckBox *chB = new QCheckBox("cb");
        w->setLayout(lay);
        lay->addWidget(chB);
        lay->addWidget(pb);
        scrollLayHTs->addWidget(w);
    }
 
    ui->_validateTVLay->addWidget(mainTopValidateW);
1
 Аватар для Annemesski
2673 / 1335 / 480
Регистрация: 08.11.2016
Сообщений: 3,687
20.05.2022, 10:19
Простите великодушно, вполне возможно что я не въехал в суть данного трэда от слова совсем, но кажется что задача элементарно решается с использованием QFormLayout и QLabel::setWordWrap(true)
1
Эксперт .NET
 Аватар для insite2012
5548 / 4311 / 1218
Регистрация: 12.10.2013
Сообщений: 12,371
Записей в блоге: 2
20.05.2022, 10:33
Цитата Сообщение от Джон Кофи Посмотреть сообщение
Сам просто на QML не писал никогда
Советую обратить на него внимание. Он того точно заслуживает. Я раньше писал на .NET, и там есть такая штука как WPF. Тоже может делать красивые интерфейсы, но вот синтаксис-просто вырвиглаз. После него мне QML был просто в радость, использовать его одно удовольствие.
1
 Аватар для Джон Кофи
266 / 81 / 18
Регистрация: 05.04.2018
Сообщений: 1,102
Записей в блоге: 1
20.05.2022, 11:15
Цитата Сообщение от Annemesski Посмотреть сообщение
Простите великодушно, вполне возможно что я не въехал в суть данного трэда от слова совсем, но кажется что задача элементарно решается с использованием QFormLayout и QLabel::setWordWrap(true)
если код автора правится всего лишь этим, то можно посмеяться, что мы тут нагородили))
1
5 / 5 / 0
Регистрация: 01.03.2022
Сообщений: 145
22.05.2022, 19:20  [ТС]
Annemesski, сделал всё, что Вы описали, результат тот же. Есть динамический фрейм, внутри него есть, предположим, qTextEdit, если текстэдит состоит из 2+ строк (либо перенос строки, либо же просто очень длинный текст, состоящий из нескольких строчек), то при добавлении текста в фрейм, фрейм остается того размера, что он и был, а в textEdit появляется полоса прокрутки, что не очень удобно.
0
5 / 5 / 0
Регистрация: 01.03.2022
Сообщений: 145
22.05.2022, 20:16  [ТС]
Annemesski,
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
void MainWindow::Update()
{
    for(int i = 0; i < lst.size(); i++){
        QFrame *frame = new QFrame(this);
        frame->setStyleSheet("background-color:rgb(47,49,54);"
                             "color:white;"
                             "border-width:1px;"
                             "border-radius:8px;"
                             "border-color: black;");
        frame->setSizePolicy(QSizePolicy::Expanding,QSizePolicy::Fixed);
        QFormLayout *lay = new QFormLayout(frame);
 
        QTextEdit *text = new QTextEdit(frame);
        text->setText(lst.at(i));
        text->setTextInteractionFlags(Qt::NoTextInteraction);
        text->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Minimum);
 
        text->setStyleSheet("background-color: transparent");
        text->setStyleSheet("border:0px solid black");
        lay->addWidget(text);;
        ui->verticalLayout_4->addWidget(frame);
    }
}
Сделал вот так, просто ввожу текст, он показывается в фрейме, фрейм находится в виджете, который находится в скролл-ареа, результат таков:


Если же сделать QLabel, дать ему SetWordWrap(true), то все еще хуже, текст не переносится, а просто идет в одну бесконечную линию.
C++ (Qt)
1
2
3
4
5
 QLabel *text = new QLabel(frame);
        text->setText(lst.at(i));
        text->setWordWrap(true);
        text->setTextInteractionFlags(Qt::NoTextInteraction);
        text->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Minimum);
0
Эксперт .NET
 Аватар для insite2012
5548 / 4311 / 1218
Регистрация: 12.10.2013
Сообщений: 12,371
Записей в блоге: 2
22.05.2022, 22:19
PrOsTo_NiK_, я вам давал совет, не мучайтесь, а переходите на QML. Ну не предназначены виджеты для произвольной кастомизации (хотя нет, конечно и на них можно сделать полностью все по своему, но придется полностью переписывать их перерисовку, что никак не радует). Так что если хотите полностью свой вид-берите и используйте QML, благо что он, собственно, не сказать что так уж сложен, базовые моменты поймете, а дальше есть доки, примеры, да масса всего для изучения.
0
5 / 5 / 0
Регистрация: 01.03.2022
Сообщений: 145
22.05.2022, 22:20  [ТС]
insite2012, да вроде смотришь, гуглишь, даже ответы читаешь, вроде все какое-то решение предлагают, кажущееся очень простым. А по итогу ничего не работает и, видимо, придется и правда написать на QML..
0
Эксперт .NET
 Аватар для insite2012
5548 / 4311 / 1218
Регистрация: 12.10.2013
Сообщений: 12,371
Записей в блоге: 2
22.05.2022, 22:34
Цитата Сообщение от PrOsTo_NiK_ Посмотреть сообщение
видимо, придется и правда написать на QML..
Так давно пора. Смысл делать что то на виджетах, заведомо зная, что виджеты-это по факту вид а-ля Windows, и ничего красивого и современного от него не получишь. Ладно бы не было выбора, так он есть. QML, QtQuick, QtQuick3D, все что угодно.
Вот ради сравнения, вот скрин. Два окна, с примерно одинаковым функционалом. Один из старого варианта программы, на виджетах. Он не разукрашивался. Второй на QML, и тоже не разукрашивался, все как есть. Что выглядит привлекательнее визуально, на ваш взгляд?
Миниатюры
Масштабирование frame и текста внутри  
2
 Аватар для Annemesski
2673 / 1335 / 480
Регистрация: 08.11.2016
Сообщений: 3,687
23.05.2022, 10:32
Лучший ответ Сообщение было отмечено PrOsTo_NiK_ как решение

Решение

Цитата Сообщение от PrOsTo_NiK_ Посмотреть сообщение
предположим, qTextEdit
зачем Вам QTextEdit, Вы хотите править заметки непосредственно в виджете (не самая лучшая идея)? Вернее будет использовать либо QLable, либо QTextBrowser
Цитата Сообщение от PrOsTo_NiK_ Посмотреть сообщение
текст не переносится, а просто идет в одну бесконечную линию.
А как вы хотите чтобы переносился текст в котором нет ни единого пробела? Вы там древнюю письменность, как на берестяных грамотах используете?

C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#ifndef NOTICEWIDGET_H
#define NOTICEWIDGET_H
 
#include <QWidget>
 
class NoticeWidget : public QWidget
{
    Q_OBJECT
public:
    NoticeWidget(QWidget * = nullptr);
 
public slots:
    void slotAddNotice(void);
};
 
#endif // NOTICEWIDGET_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
#include "NoticeWidget.h"
 
#include <QFormLayout>
#include <QInputDialog>
#include <QLabel>
 
NoticeWidget::NoticeWidget(QWidget *parent) : QWidget(parent)
{
    setLayout(new QFormLayout);
    setWindowTitle("NoticeWidget");
}
 
void NoticeWidget::slotAddNotice()
{
    QString notice = QInputDialog::getText(nullptr, "NoticeInput", "Введите заметку");
 
    static int num = 0;
    QLabel *noticeAttribLb = new QLabel("Заметка " + QString::number(++num));
    QLabel *noticeTextLb = new QLabel(notice);
    noticeTextLb->setWordWrap(true);
    noticeTextLb->setFrameShape(QLabel::Shape::Box);
 
    reinterpret_cast<QFormLayout *>(layout())->addRow(noticeAttribLb, noticeTextLb);
}
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include "NoticeWidget.h"
 
#include <QApplication>
#include <QPushButton>
 
int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
 
    NoticeWidget *w = new NoticeWidget;
    w->show();
 
    QPushButton *btn = new QPushButton("Добавить заметку");
    QObject::connect(btn, &QPushButton::clicked, w, &NoticeWidget::slotAddNotice);
    btn->show();
 
 
    return a.exec();
}
Добавлено через 2 минуты
Впрочем, как говориться: наше дело - предложить, Ваше дело - отказаться.
1
5 / 5 / 0
Регистрация: 01.03.2022
Сообщений: 145
23.05.2022, 10:53  [ТС]
insite2012, разумеется, первый вариант намного приятнее на вид. В целом, красивый внешний вид можно попытаться получить с помощью QSS, но Вы правы в том, что виджеты очень ограниченны, порой эта ограниченность мешала, приходилось довольствоваться тем, что есть. Я Вас понял, возможно именно Вы стали толчком для начала изучения QML, спасибо

Добавлено через 2 минуты
Annemesski, да, с QLabel текст переносится если есть пробелы, я это не учёл. Спасибо за Ваш вариант, временно оставлю его, но по наводке insite2012 постараюсь познать азы QML, возможно в будущем сделаю всё это "покрасивше". Большое спасибо за уделенное время
0
5 / 5 / 0
Регистрация: 01.03.2022
Сообщений: 145
23.05.2022, 11:21  [ТС]
insite2012, вот, сейчас всё написано чисто на виджетах, выглядит не так отвратно, как бы оно выглядело без отсутствия QSS, но ограниченность всё же видна в некоторых моментах
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
23.05.2022, 11:21
Помогаю со студенческими работами здесь

Не растягивается grid внутри canvas frame
class Brend_table(): ''' Класс работы с таблицей отображения на форме с данными ..... ''' def...

Изменить стиль внутри frame через определенное время
Добрый день, делаю для своей школы онлайн расписание. Просто в коридоре в школе будет висеть плазма на которой будет открыт мой сайт. На...

Масштабирование изображения внутри ячейки таблицы
Приветствую. Долгое гугление не принесло толком никаких результатов, так что надеюсь получить здесь ответ. Имеется таблица с одной...

Настройка плиточного интерфейса. Масштабирование изображения внутри плитки
Вопрос в следующем. Иконка Firefox прекрасно растянулась на средний размер плитки. В то время, как иконки моего компьютера, параметров и...

Контекстное меню и вывод текста на рамку (frame)
Имеется 6 рамок (frame) и необходимо чтобы при нажатии правой кнопкой мыши на любое место в пределах соответствующей рамки, открывалось...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
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 была полностью переписана на Си, в. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru