Jak wyświetlić siatkę za pomocą QPixmap Qt

Bash, C, C++, Java, PHP, Ruby, GTK, Qt i wiele innych - wszystko tutaj.
sentrio
Piegowaty Guziec
Piegowaty Guziec
Posty: 24
Rejestracja: 05 gru 2009, 17:28
Płeć: Mężczyzna
Wersja Ubuntu: 9.10
Środowisko graficzne: GNOME
Architektura: x86

Jak wyświetlić siatkę za pomocą QPixmap Qt

Post autor: sentrio »

No więc QT uczę się od niedawna i naszła mnie chęć żeby zrobić prostego snake'a. Chcę wygenerować scenę np 320x160 małych pkt za pomocą QPixmap i potem użyć funkcji fill() aby zapełnić ją na czarno i osadzić na QVBoxLayout a pod tym pixmapem ma być QPushButton z wyjsciem. Przycisk nie jest żadnym problemem tylko jak robię tego pixmapa to w layoucie nie mogę go ustawić bo funkcja addWidget nie przyjmuje za parametr QPixmap. Tu pytanie - jak wyświetlić taką mapę 320 na 160 kwadratów. Chętnie dowiem się jak da się coś takiego inaczej wykonać.
Ostatnio zmieniony 22 wrz 2011, 20:14 przez sentrio, łącznie zmieniany 2 razy.
Awatar użytkownika
Struchu
Serdeczny Borsuk
Serdeczny Borsuk
Posty: 116
Rejestracja: 23 mar 2008, 19:58
Płeć: Mężczyzna
Wersja Ubuntu: 11.04
Środowisko graficzne: GNOME
Architektura: x86

Re: Jak wyświetlić siatkę za pomocą QPixmap QT

Post autor: Struchu »

Stwórz sobie obiekt klasy QLabel i za pomocą slotu setPixmap wstaw do niego QPixmap.
sentrio
Piegowaty Guziec
Piegowaty Guziec
Posty: 24
Rejestracja: 05 gru 2009, 17:28
Płeć: Mężczyzna
Wersja Ubuntu: 9.10
Środowisko graficzne: GNOME
Architektura: x86

Re: Jak wyświetlić siatkę za pomocą QPixmap QT

Post autor: sentrio »

Szukałem po internecie i postanowiłem najpierw wyświetlić jakiś obrazek ale żaden kod nie wyświetla mojego obrazka, tylko białe tło.

Kod: Zaznacz cały

QPixmap pm("foto.png");
  QLabel lbl;
  lbl.setPixmap(pm);
  lbl.show();
Kompilator qt-creator win7
Awatar użytkownika
beluosus
Zakręcona Traszka
Zakręcona Traszka
Posty: 695
Rejestracja: 01 paź 2006, 15:32
Płeć: Mężczyzna
Wersja Ubuntu: inny OS
Środowisko graficzne: Xfce
Architektura: x86
Kontakt:

Re: Jak wyświetlić siatkę za pomocą QPixmap QT

Post autor: beluosus »

Nie ustawiasz rodzica dla labela. Zrób to w konstruktorze lub metodą setParent(). Poza tym jeśli lbl jest zmienną lokalną to prawdopodobnie nic nie zobaczysz, bo label zostanie zniszczony kiedy funkcja zakończy działanie (żywotność zmiennej lokalnej jest ograniczona do zakresu między nawiasami {}). Albo utwórz obiekt dynamicznie (new), albo utwórz pole w klasie z oknem.

PS
Do tego mógłbyś ustawić jakieś geometry albo wstawić do layoutu (ale i bez tego label najprawdopodobniej pojawi się gdzieś w oknie).

PPS
Nie QT, tylko Qt.
sentrio
Piegowaty Guziec
Piegowaty Guziec
Posty: 24
Rejestracja: 05 gru 2009, 17:28
Płeć: Mężczyzna
Wersja Ubuntu: 9.10
Środowisko graficzne: GNOME
Architektura: x86

Re: Jak wyświetlić siatkę za pomocą QPixmap QT

Post autor: sentrio »

Zrobiłem mały progres w budowie programu. Więc jest teraz generowane qpixmap i pomalowane od razu na czarno oraz wprowadziłem obsługę klawiatury tzn ASDW będą sterować wężem , Q - zamyka grę . Teraz pytanie - jak podzielić tego qpixmapa na tabelę 320x240 pkt by było je widzieć i jak je pomalować. Mam nadzieję że jest do tego zaimplementowana obsługa jakiejś tablicy.

Kod: Zaznacz cały

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QtGui>

namespace Ui {
    class MainWindow;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT

protected:
    void keyPressEvent (QKeyEvent *event);

public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();

private:
    Ui::MainWindow *ui;
    QVBoxLayout *uklad;
    QPushButton *wyjscie;
    QLabel *info, *label;

};

#endif // MAINWINDOW_H

Kod: Zaznacz cały

#include "mainwindow.h"
#include "ui_mainwindow.h"

#include <QtGui>

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    this->setWindowTitle("snake");
    this->setGeometry(400,400,500,300);


    wyjscie=new QPushButton("wyjsie",this);
    connect(wyjscie, SIGNAL(clicked()),qApp,SLOT(quit()));


    QPixmap pixmap(320,240);
    label=new QLabel();
    info=new QLabel("info");
    pixmap.fill(Qt::black);
    label->setPixmap(pixmap);


    uklad = new QVBoxLayout;
    uklad->addWidget(label);
    uklad->addWidget(info);
    uklad->addWidget(wyjscie);
    ui->centralWidget->setLayout(uklad);

}

void MainWindow::keyPressEvent (QKeyEvent *event)
{
    switch(event->key())
    {
    case Qt::Key_W:
        info->setText("UP");
        break;

    case Qt::Key_S:
        info->setText("DOWN");
        break;

    case Qt::Key_A:
        info->setText("LEFT");
        break;

    case Qt::Key_D:
        info->setText("RIGHT");
        break;

    case Qt::Key_Space:
        info->setText("SPACE");
        break;
    case Qt::Key_Q:
        qApp->exit();
        break;

    default:
        info->setText("ANYTHING");
        break;
    }
}

MainWindow::~MainWindow()
{
    delete ui;
}
ODPOWIEDZ

Wróć do „Programowanie”

Kto jest online

Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 9 gości