Sida 1 av 1
Qt Creator... hittar inte widget?
Postat: 23 december 2011, 15:11:35
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 raden
ui -> 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?
Re: Qt Creator... hittar inte widget?
Postat: 23 december 2011, 15:20:31
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.

Re: Qt Creator... hittar inte widget?
Postat: 23 december 2011, 15:30:47
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...
Re: Qt Creator... hittar inte widget?
Postat: 23 december 2011, 15:36:55
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.
Re: Qt Creator... hittar inte widget?
Postat: 23 december 2011, 16:19:52
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?
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);