• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Rozjeżdżające się GUI

HackNation - ogólnopolski hackathon
0 głosów
380 wizyt
pytanie zadane 24 marca 2021 w C i C++ przez mattaha Użytkownik (690 p.)

Cześć

Gdy odpalam program i mam ustawioną szerokość Box na 150 oraz wysokość na tę samą wartość to program działa jak powinien, tzn. wyświetla ładny kwadrat o zaokrąglonych rogach:

Jeśli podstawie sobie w konstruktorze klasy Box wartości

Box box {Point{100, 100}, 150, 300};

to otrzymuję

Co jest nie tak? Dlaczego mi się to rozjeżdża? Jakieś protipy jak to ogarnąć?

Kod:

#include "Simple_window.h"
#include "Graph.h"

struct Arc : Shape {
    Arc(Point p, int w, int h, int a1, int a2)
        : w{w}, h{h}, a1{a1}, a2{a2} {
        add(Point{p.x, p.y});
    }

    void draw_lines() const;

private:
    int w;
    int h;
    int a1;
    int a2;
};

void Arc::draw_lines() const {
    if (color().visibility()) {
        fl_arc(point(0).x, point(0).y, w, h, a1, a2);
    }
}

struct Box : Shape {
    Box(Point p, int w, int h)
        : w{w}, h{h} {
        add(p);
    }

    void draw_lines() const;

private:
    int w;
    int h;
};

void Box::draw_lines() const {
    Arc arc1(Point(point(0).x, point(0).y),w/3.0, h/3.0, 180, 90);
    arc1.draw_lines();
    Line side1(Point(point(0).x, point(0).y + h/6.0), Point(point(0).x, point(0).y + h/2.0));
    side1.draw();
    Arc arc2(Point(point(0).x, point(0).y + h/3.0),w/3.0, h/3.0, 270, 180);
    arc2.draw_lines();
    Line side2(Point(point(0).x + h/6.0, point(0).y + 2*h/3.0),
               Point(point(0).x + h/2.0, point(0).y + 2*h/3.0));
    side2.draw();
    Arc arc3(Point(point(0).x + w/3.0, point(0).y + h/3.0),w/3.0, h/3, 360, 270);
    arc3.draw_lines();
    Line side3(Point(point(0).x + 2*w/3.0, point(0).y + h/6.0),
               Point(point(0).x + 2*w/3.0, point(0).y + h/2.0));
    side3.draw();
    Arc arc4(Point(point(0).x + w/3.0, point(0).y), w/3.0, h/3.0, 90, 0);
    arc4.draw_lines();
    Line side4(Point(point(0).x + h/6.0, point(0).y),
               Point(point(0).x + h/2.0, point(0).y));
    side4.draw();
}

int main() {
    using namespace Graph_lib;
    Simple_window win{Point{100, 100}, 600, 400, "Moje okno"};
    Box box {Point{100, 100}, 150, 300};
    win.attach(box);
    win.wait_for_button();
    return 0;
}

2 odpowiedzi

+3 głosów
odpowiedź 24 marca 2021 przez tangarr Mędrzec (155,140 p.)
wybrane 24 marca 2021 przez mattaha
 
Najlepsza
Podczas rysowania górnej i dolnej krawędzi używasz wysokości zamiast szerokości w obliczeniach.
komentarz 24 marca 2021 przez mattaha Użytkownik (690 p.)
Dzięki koleś!
0 głosów
odpowiedź 24 marca 2021 przez Xames Nowicjusz (240 p.)
Nie znam tej biblioteki, ale prawdopodobnie problem jest w tym, że ustawiasz rozmiar okna który jedyne co ci robi to rozciąga obraz. Musisz poszukać jakiegoś view, gdzie ustawiasz skalę.

Podobne pytania

0 głosów
2 odpowiedzi 883 wizyt
0 głosów
1 odpowiedź 359 wizyt
0 głosów
1 odpowiedź 1,447 wizyt
pytanie zadane 1 grudnia 2015 w Java przez Mikrokontroler xD Stary wyjadacz (13,500 p.)

93,626 zapytań

142,551 odpowiedzi

323,036 komentarzy

63,130 pasjonatów

Advent of Code 2025

Top 15 użytkowników

  1. 1452p. - dia-Chann
  2. 1437p. - DziarnowskiJ
  3. 1411p. - Łukasz Piwowar
  4. 1409p. - CC PL
  5. 1371p. - raydeal
  6. 1369p. - Adrian Wieprzkowicz
  7. 1360p. - Tomasz Bielak
  8. 1335p. - robwarsz
  9. 1275p. - Maurycy W
  10. 1141p. - ssynowiec
  11. 1116p. - rucin93
  12. 1100p. - Mariusz Fornal
  13. 885p. - Dominik Łempicki (kapitan)
  14. 847p. - Grzegorz Aleksander Klementowski
  15. 838p. - Wojciech Malicki
Szczegóły i pełne wyniki

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Kursy INF.02 i INF.03
...