AbstractItemView richtig dimensionieren

Alles rund um die Programmierung mit Qt
Antworten
AuE
Beiträge: 918
Registriert: 5. August 2008 10:58

AbstractItemView richtig dimensionieren

Beitrag von AuE »

Hi,

ich bin gerade dabei mich mit dem chart Beispiel aus den Qt Examples (ItemViews) auseinander zusetzen.
Soweit so gut.
Nur verstehe ich das mit der größe noch nicht so ganz :-D

Die ist ja eig fest vorgegeben (siehe C'Tor von PieView)
Ich wollte das jetzt gerne dynamisch haben. Also berechne ich mir totalSize und pieSize im Paint event via

Code: Alles auswählen

  totalSize =(int) (qMin( this->size().width(), this->size().height()) *0.8);
  pieSize = totalSize - 2*margin;
Der PieView ist soweit auch gut dimensioniert.
Nur die "Legende" ist irgendwie komisch. Die Zeichenkette müsste doch eig noch dargestellt werden können.
Hat jmd. eine Idee?

Und als 2ter Punkt: Wie kann ich das ges. "Widget" (also den View) durchsichitg machen?


grüße!


// EDIT:

Habe im paintEvent mal die folgende Ausgabe eingebaut:

Code: Alles auswählen

QStyleOptionViewItem option = viewOptions();
		option.rect = visualRect(labelIndex );
		qDebug() <<  "The font for the text needs:"<< option.fontMetrics.boundingRect(labelIndex.data().toString()).width() << " and the rect is"<< option.rect.width();
Ausgabe (Bsp)
The font for the text needs: 106 and the rect is 120
Dennoch wird das hinten abgeschnitten obwohl npch massig platz nach rechts wäre.
Dateianhänge
screenshot.png
screenshot.png (27.28 KiB) 1646 mal betrachtet
russkij
Beiträge: 57
Registriert: 14. Dezember 2005 11:57

Beitrag von russkij »

hab mal kurz angeschaut und ohne groß nachzudenken ein wenig experimentiert.

ich würde sagen schuld ist nicht der paint, sondern der itemRect()
alle angaben ohne Gewähr :-)

Code: Alles auswählen


switch (index.column()) {
        case 0:
            itemHeight = QFontMetrics(viewOptions().font).height();

            //ich würde sagen hier ist der schuldige. hier wird totalSize size verwendet, die meiner meinung nach zu diesem zeitpunkt falsch ist. setze die mal fest auf 1000
            return QRect(totalSize,
                         int(margin + listItem*itemHeight),
                         totalSize - margin, int(itemHeight));
        case 1:
            return viewport()->rect();
        }

AuE
Beiträge: 918
Registriert: 5. August 2008 10:58

Beitrag von AuE »

Cool und thx schonmal..das hätt bei mir noch nen Jahr gedauert ;-) Habs erstmal nur via hack gelöst:

Code: Alles auswählen

case 0:	
  itemHeight = QFontMetrics(viewOptions().font).height();
    return QRect(totalSize,
	 int(margin + listItem*itemHeight),
	 qMin(totalSize - margin,
      viewOptions().fontMetrics.boundingRect( model()->index(index.row(),0, rootIndex()).data().toString().left(model()->index(index.row(),0, rootIndex()).data().toString().length() / 2) + model()->index(index.row(),0, rootIndex()).data().toString()).width() ),
 int(itemHeight));
Jetzt noch 2 Fragen:

i) Wie kann man das verhalten der Scrollbars jetzt noch beeinflussen? Beim kleinmachen wird ja jetzt alles mit kleiner. Dann gehen auch mal die Scrollbars weg. Beim großziehen kommen sie allerdings wieder, obwohl weder Items noch Pie größer sind als die Fläche die ohne Scroll angezeigt werden kann.
(habe mal mein cpp in den Anhang gepackt)

ii) Wie bekommt man ein Tranzparentes Widget? Also das was weiß ist hätte ich gerne durchschimmernd. Hab da schonmehrere Sacehn versucht aber leider klappt es nicht so recht.

EDIT:
Habe gerade festgestellt das ich da scheinbar bei meiner istri was nicht an habe ;-) Das Tranculent Clock ist bei mir mit nen schwarzen Rahmen versehen - was fehlt mir da?
Habe mal spassenshalber den versuch gemacht und die Clock in ein Widget mit Hintergrund gebracht.... sieht das bei euch auch so sch** aus?? Siehe angefügter screenshot
Dateianhänge
screenshot2.png
screenshot2.png (92.61 KiB) 1619 mal betrachtet
pieview.cpp
(17.34 KiB) 114-mal heruntergeladen
Antworten