content von qscrollview ändert sich beim vergrößern/verklein

Alles rund um die Programmierung mit Qt
Antworten
geistgesicht
Beiträge: 3
Registriert: 25. Februar 2005 16:14

content von qscrollview ändert sich beim vergrößern/verklein

Beitrag von geistgesicht »

Hallo,

ich habe ein Qwidget mit fester größe (setFixedSize()) welches ich einem QSrcollview mit addChild() zuweise. Verändere ich nun die Größe des QScrollviews, so wird der Inhalt des QScrollviews (also das QWidget) verzerrt dargestellt. Es wird quasi in das QWidget "reingezoomt" ohne dass ich das will. Dabei wird der Inhalt des QWidgets grobpixelig interpoliert.

Vielen Dank für jede Hilfe!

Konstantin
FlorianBecker
Beiträge: 1213
Registriert: 2. Dezember 2004 10:54
Kontaktdaten:

Beitrag von FlorianBecker »

Hi, kann ich so nix dazu sagen, hast du Code?
geistgesicht
Beiträge: 3
Registriert: 25. Februar 2005 16:14

Beitrag von geistgesicht »

Ich habe hier mal die wichtigsten Elemente des Codes zusammengestellt, bin für jede Hilfe sehr dankbar!
Ich zeichne in der paintEvent Funktion mit dem QPainter etwas auf das ConnectWidget und das wird alles korrekt angezeigt. Verändere ich aber die Größe des QScrollViews (ich mache das Fenster kleiner), dann wird der Inhalt grob-pixelig vergrößert dargestellt:

m_widget = new ConnectWidget(0,0,m_app);
m_widget->setGeometry(...);
m_sv = new QScrollView(...);
m_sv->addChild(m_widget);
m_sv->show();
m_widget->show();

m_widget->setData(...);
m_app->processEvents();
.
.
.
void ConnectWidget::paintEvent( QPaintEvent *event )
{
QPainter paint( &m_buffer );

paint.setWindow(event->rect());
paint.eraseRect(event->rect());

//dann folgen einige Operationen mit dem painter...

paint.flush();
bitBlt(this, 0, 0, &m_buffer);
}

void ConnectWidget::resizeEvent ( QResizeEvent * event )
{
m_buffer.resize( event->size() );
m_buffer.fill( white );
}

int ConnectWidget::setData(...)
{
.
.
.
update();
}

Vielen Dank nochmals..
FlorianBecker
Beiträge: 1213
Registriert: 2. Dezember 2004 10:54
Kontaktdaten:

Beitrag von FlorianBecker »

Das ist wie ich annehme alles in einem Widget, oder? Also, was mir auf einen ersten kurzen Blick augefallen ist, dass du 0 als parent Widget übergibst. Da sollte this drin stehen, wenn mich nicht alles täuscht und damit sollte das Problem gelöst sein. Denn das Problem, auch von deiner Beschreibung scheint lediglich ein Layout Problem zu sein.
geistgesicht
Beiträge: 3
Registriert: 25. Februar 2005 16:14

Beitrag von geistgesicht »

Hallo und vielen Dank erst mal!
Leider erstelle ich den Scrollview nicht innerhalb eines anderen widgets. Ausserdem habe ich eine static Application, der beliebig viele Instanzen des Scrollviews zugewiesen werden sollen d.h. ich kann setMainWidget() nicht verwenden...
FlorianBecker
Beiträge: 1213
Registriert: 2. Dezember 2004 10:54
Kontaktdaten:

Beitrag von FlorianBecker »

Naja, dann lös das ohne static, und mache es einfach als instace, damit geht das dann.

DeineKlasse() {

myInstance = this;
}

class DeineKlasse {

public:
static instance() { return myInstance; }
}

Das geht sicher... einfach mal ein wenig rumbasteln.
Antworten