Qt Creator... hittar inte widget?

Elektronik- och mekanikrelaterad mjukvara/litteratur. (T.ex schema-CAD, simulering, böcker, manualer mm. OS-problem hör inte hit!)
Användarvisningsbild
jesse
Inlägg: 9240
Blev medlem: 10 september 2007, 12:03:55
Ort: Alingsås

Qt Creator... hittar inte widget?

Inlägg av jesse »

Jag har gjort en dialogruta på vanligt vis med det grafiska interfäjset i Qt Creator. Jag har lagt dit några knappar , en textrad (QLineEdit* textruta) och en progressBar (QProgressBar* tbar). Jag ska skicka lite data till de båda från egna slots inne i Dialog.
Qt4issue01.png
Till "textruta" går det bra att skicka text i denna slot i dialog.cpp:

Kod: Markera allt

void Dialog::update()
{
    tid++;
    if (tid > 100) {
        tid = 0;
        ui -> textruta -> setText("timeout!");
    }
    ui -> tbar -> value(tid);
}
Progressbaren ska alltså öka värde tills den når 100. Då ska texten "timeout!" skrivas i textrutan. Men den här koden går alltså inte att kompilera.
Jag får fel: "class Ui::Dialog" har ingen medlem med namnet "tbar".

Om jag kommenterar bort radenui -> tbar -> value(tid); så kompileras det och fungerar (dvs. texten timeout visas efter ett tag i textrutan).

Så nu är frågan: Vad har jag gjort fel? Varför existerar textruta men inte tbar?
Du har inte behörighet att öppna de filer som bifogats till detta inlägg.
Användarvisningsbild
jesse
Inlägg: 9240
Blev medlem: 10 september 2007, 12:03:55
Ort: Alingsås

Re: Qt Creator... hittar inte widget?

Inlägg av jesse »

Hmmm... Det märkliga är att ProgressBaren tbar inte ritas ut i det program som kompileras och kör, men den finns i Qt Designer. Filen dialog.ui är sparad, så den bör ju finnas med, men den existerar ju uppenbarligen. Har jag lyckats hitta en bugg i Qt4-IDE redan på den här nivån, eller hur ska jag tolka det?
Qt4issue02.png
Min widget finns uppenbarligen med i .ui-filen:

Kod: Markera allt

<widget class="QProgressBar" name="tbar">
   <property name="geometry">
    <rect>
     <x>10</x>
     <y>290</y>
     <width>241</width>
     <height>16</height>
    </rect>
   </property>
   <property name="value">
    <number>24</number>
   </property>
  </widget>
 </widget>
EDIT: Jag ändrade nu rubriken till "Kalkylator version 1.2", sparade filen oh kompilerade. Det visade sig att det fortfarande står "Kalkylator version 1.0" när programmet körs. :humm:
Du har inte behörighet att öppna de filer som bifogats till detta inlägg.
sodjan
EF Sponsor
Inlägg: 43249
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: Qt Creator... hittar inte widget?

Inlägg av sodjan »

Kör du/verktyget någon slags "make" ?
Finns det någon "build all" eller liknande som bygger om allt utan make-funktion ?
Det ser ju ut som att verktygen inte "ser" att filen är uppdaterad...
Användarvisningsbild
jesse
Inlägg: 9240
Blev medlem: 10 september 2007, 12:03:55
Ort: Alingsås

Re: Qt Creator... hittar inte widget?

Inlägg av jesse »

Jag har försökt "clean all" och "rebuild all", men headerfilen som skapas av design-interfacet (ui_dialog.h) är en gammal headerfil. När jag döper om den så skapas ingen ny och då stannar kompileringen direkt när den letar efter ui_dialog.h givetvis. Det verkar som om designgeneratorn inte skapar någon c++ kod som den borde.
Användarvisningsbild
jesse
Inlägg: 9240
Blev medlem: 10 september 2007, 12:03:55
Ort: Alingsås

Re: Qt Creator... hittar inte widget?

Inlägg av jesse »

Jag rensade bort alla filer i projektet manuellt och startade om Qt4 Creator. Plötsligt fungerar det. Tröttsamt med sånt här krångel som uppstår bakom kulisserna. Vad var det som hände? :humm:

Nu får jag istället ett mer hanterligt fel: Jag anropar antagligen en metod med fel argument:

Kod: Markera allt

 fel: ingen matchande funktion för anrop av "QProgressBar::value(int&)"
/usr/lib/qt4/include/QtGui/qprogressbar.h:81:9: anm: kandidat är:[b] int QProgressBar::value() const[/b]
Jag som bara skickade ett vanligt "int" som argument... :|
Här brister min kunskap om C++ .... Jag kan inte tolka dokumentationen:

Jag tänkte alltså utnyttja int value() const. Dokumentationen ser ut så här:

Kod: Markera allt

Public Functions
    QProgressBar ( QWidget * parent = 0 )
    Qt::Alignment	alignment () const
    QString	format () const
    bool	invertedAppearance ()
    bool	invertedAppearance () const
    bool	isTextVisible () const
    int	maximum () const
    int	minimum () const
    Qt::Orientation	orientation () const
    void	setAlignment ( Qt::Alignment alignment )
    void	setFormat ( const QString & format )
    void	setInvertedAppearance ( bool invert )
    void	setTextDirection ( QProgressBar::Direction textDirection )
    void	setTextVisible ( bool visible )
    virtual QString	text () const
    QProgressBar::Direction	textDirection ()
    QProgressBar::Direction	textDirection () const
    int	value () const
EDIT: aha, det är inte någon av dessa funktioner jag ska använda. Några sidor längre ner i dokumentationen hittar jag "Public Slots"

Kod: Markera allt

Public Slots
void	reset ()
void	setMaximum ( int maximum )
void	setMinimum ( int minimum )
void	setOrientation ( Qt::Orientation )
void	setRange ( int minimum, int maximum )
void	setValue ( int value )
och här hittar jag void setValue ( int value ) :)

Rätt kod är givetvis då
ui -> tbar ->setValue(tid);
Skriv svar