Jak wyświetlić siatkę za pomocą QPixmap Qt
-
- 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
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.
- Struchu
- 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
Stwórz sobie obiekt klasy QLabel i za pomocą slotu setPixmap wstaw do niego QPixmap.
-
- 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
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.
Kompilator qt-creator win7
Kod: Zaznacz cały
QPixmap pm("foto.png");
QLabel lbl;
lbl.setPixmap(pm);
lbl.show();
- beluosus
- 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
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.
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.
-
- 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
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;
}
Kto jest online
Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 5 gości