Qt - zmienianie kształtu i wyglądu przycisku (QPushButton'a)

0

Witam. Jak w temacie - chodzi o linijki kodu, które pozwolą mi zmienić kształt QPushButton'a. Póki co, po googlowaniu i korzystaniu z metody prób i błędów, doszedłem do czegoś takiego:

    PlayButton = new QPushButton(this);
    PlayButton->setGeometry(300, 325, 60, 60);
    QRect *rect = new QRect(0,0,50,50);
    QRegion* region = new QRegion(*rect,QRegion::Ellipse);
    PlayButton->setMask(*region);
    PlayButton->setIcon(QIcon(":/Graphics/PlayButton.png")); 

Mam kilka pytań, bo nawet nie jestem pewien co do końca zrobiłem ;) No więc tak:

  1. Czemu wielkość obiektu QRect w tym kodzie zawsze musi być mniejsza od wielkości przycisku o 10 (inaczej nie wychodził okrągły przycisk)? Tą część kodu znalazłem na stackoverflow (http://stackoverflow.com/questions/12734319/change-rectangular-qt-button-to-round) i nie jest tam do końca wytłumaczone, jak to działa. Nie wiem, czy dobrze to rozumiem - według mnie wskaźnik 'rect' wskazuje na obszar będący kwadratem 60x60 pix, a wskaźnik 'region' to po prostu 'wycięta', okrągła część obiektu wskazywanego przez 'rect'?
  2. Czemu tak zrobiony przycisk nie ma konturów? Dodatkowo u mnie przy takich rozmiarach przycisku z lewej strony i z góry są krótkie proste linie.
  3. Czy do funkcji setMask() nie da się po prostu wysłać obrazka? Chodzi mi o to, żeby przycisk przyjął kształt przysłanego zdjęcia. Próbowałem czegoś tak, ale nie działało:
PlayButton->setMask(":/Graphics/PlayButton.png");

i tak:

PlayButton->setMask(new QPixmap(":/Graphics/PlayButton.png"));
  1. Jak sprawić, by dodana przeze mnie ikona przycisku była na jego środku? U mnie jest trochę bardziej po prawej.
    Z góry dzięki za odpowiedzi.
0

Ja do zmiany wyglądu przycisków robię coś zupełnie innego a mianowicie przypisuje od razu do wszystkich przycisków.

Kod w pliku main.cpp

QApplication a(argc, argv);
    metin2_patcher w;
    w.show();

    a.setStyleSheet("QPushButton{background-color: rgb(0, 102, 102);"
                    "border-width: 1px;"
                    "border-radius: 5;"
                    "color: white;"
                    "border-color: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 0, stop: 0 darkGray, stop: 1 darkGray)"
                                  "qlineargradient(x1: 0.5, y1: 0.5, x2: 0.5, y2: 0.5, stop: 0 black, stop: 1 black)"
                                  "qlineargradient(x1: 1, y1: 1, x2: 1, y2: 1, stop: 0 darkGray, stop: 1 darkGray);}"
                    );
0

Nikt nic nie wie?

0

Dobra, chyba trzeba po prostu zadać to pytanie na jakimś forum poświęconym QT. Temat do usunięcia.

1 użytkowników online, w tym zalogowanych: 0, gości: 1