Seite 1 von 1

[gelöst]QLabel per code platzieren->Ich werd noch wahnsin

Verfasst: 15. Januar 2010 23:55
von lx2
Also ertma vorneweg, Debugger startet nichtmehr (release geht):
ASSERT failure in QVector<T>::at: "index out of range", file ..\..\include/QtCore/../../src/corelib/tools/qvector.h, line 338

This application has requested the Runtime to terminate it in an unusual way.
Please contact the application's support team for more information.

Ich habe folgende Testfunktion:

Code: Alles auswählen

void MindCounter::displayMyLabel(){
    QLabel *label = new QLabel(this);
    label->setText("first line\nsecond line");
}
wenn ich die funktion hier aufrufe, geht sie nicht

MindCounter::MindCounter(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MindCounter)
{

ui->setupUi(this);
init();
displayMyLabel();
}



wenn ich sie aus der init()-Funkion aufrufe geht sie!
wenn ich sie per KeyBoard-Shortcut aufrufe geht sie wieder nicht.
wenn ich displayMyLabel(), aus meiner Funktion starteCounter() aufrufe, was mein Ziel ist, geht es natürlich auch nicht.

Was zum ... ???
Wer kann helfen. Wie muss die funktion abgeändert werden dass von überall ein Label im Hauptfenster oben links über alles drübergelegt wird.

Verfasst: 16. Januar 2010 01:32
von kater
Das ist das Verhalten wenn du woanders irgendwo im Code Müll baust. Wo verwendest du denn QVector überall? Da schlägt ja ein Fehler zu. Vllt. hilft es auch mal "Projekt bereinigen" und alles neu erstellen.

Verfasst: 16. Januar 2010 09:56
von lx2
@debugger
Hab schon bereinigt und neu gebuildet... immer noch das gleiche.

Das Lustige: ich verwende QVector nicht in einer Zeile.
Es muss von irgendeiner Qt-funktion aufgerufen werden.
Aber ohne Debugger das rauszufinden:ein Teufelskreis...

Zum anderen Problem:

Ahhh ich könnte mir in den Ar... beißen.

Code: Alles auswählen

label->show();
fehlte!
Warum kann mich da keiner freundlicherweiße darauf hinweisen :?: :roll:
Über 20 Klicks und keiner sagt was, ausßer das mein Code Müll ist.

Naja, nix für ungut.
Das mit dem debugger wird bestimmt auch noch.

lg, alex

Verfasst: 16. Januar 2010 11:42
von kater
Das liegt an 2 Dingen.
1. habe ich noch nie im leben ->show() von Hand aufgerufen, das daher garnicht wusste und
2. wenn du einfach nur ein QLabel erzeugst und show() aufrufst, dann erscheint es doch nicht wirklich im Programm oder? Du hast ja nicht gesagt wo es erscheinen soll und was das Parent WIdget ist. Oder brauchst man das alles nicht?

Verfasst: 17. Januar 2010 08:21
von lx2
also wenn man zur Laufzeit eines Programms ein Widget (Button, Label, was auch immer) erstellen will, braucht man anscheinend dieses show().


Und natürlich hab ich gesagt wer der Papa ist ;)

void MindCounter::displayMyLabel(){
QLabel *label = new QLabel(
this);
label->setText("first line\nsecond line");
label->show();
}


Erscheinen tuts natürlich oben links. Also an der position (x=0, y=0)
Kann man ja manuell ändern:

label->setGeometry(x, y , breite , höhe);

z.B.:
label->setGeometry(this->width()-250, 10 , 180 , 82);

Verfasst: 19. Januar 2010 07:22
von kater
Ah ok. Wieder was gelernt :)