Strona 1 z 1

[C++] QT, zrozumieć pomoc qt...

: 11 sty 2011, 10:51
autor: soulreaver1
Witam.

Właśnie wstawiłem sobie widgeta ComboBox do mojego programiku, niestety mam problem z jego implementacją.
W pomocy qt creatora znalazłem metodę insertItems która służy do wstawienia elementów do listy combo.

Kod: Zaznacz cały

void QComboBox::insertItems ( int index, const QStringList & list )

Inserts the strings from the list into the combobox as separate items, starting at the index specified.
If the index is equal to or higher than the total number of items, the new items are appended to the list of existing items. If the index is zero or negative, the new items are prepended to the list of existing items.
Na podstawie tego napisałem swoją metodę, nie wiem co oznacza "& list" więc pominąłem to.

Kod: Zaznacz cały

void MainWindow::ustawznak()
{
    QStringList znaki;
    znaki << " " << "_" << "-" << "|";
    ui->comboBox->insertItems(1, znaki);
   }
Program się kompiluje bez błędów, jednak ComboBox nie działa, nie rozwija się lista elementów. Moje pytanie; gdzie szukać opisów argumentów takich jak &list , &texts itp. ?

Odp: [C++] QT, zrozumieć pomoc qt...

: 11 sty 2011, 12:52
autor: norvoles
Błąd musiałeś zrobić gdzie indziej, bo taki kod działa:

Kod: Zaznacz cały

QStringList znaki;
znaki << "A" << "B" << "C" << "D";
combo->insertItems(0, znaki);
formLayout->addRow(tag_name, combo);
http://img97.imageshack.us/img97/5033/beznazwyh.png
nie wiem co oznacza "& list" więc pominąłem to
QStringList to jest (mniej więcej) to samo co QList<QString>, czyli lista stringów, &list jest referencją na obiekt tego typu.

Odp: [C++] QT, zrozumieć pomoc qt...

: 11 sty 2011, 22:06
autor: mikolajs
Moje pytanie; gdzie szukać opisów argumentów takich jak &list , &texts itp. ?
W porządnej książce do C++ ;)

Odp: [C++] QT, zrozumieć pomoc qt...

: 11 sty 2011, 23:15
autor: Razi
Jeśli w sygnaturze funkcji w argumencie jest znaczek &, to znaczy że przekazywana jest referencja, czyli obiekt nie jest kopiowany przez co działa szybciej.
Z poziomu wywoływania takich funkcji niczym to się prawie nie różni.

Różnica jest tylko taka, że jeśli ten obiekt będzie w tej funkcji zmieniony, to poza nią też się zmieni. Ale o ile pamiętam to w Qt to rzadkość, aby obiekt przekazywany przez referencję był modyfikowany, więc nie ma co się tym przejmować.

Przykład:

Kod: Zaznacz cały

void f(int l){
  l+=5;
}
void r(int &l){
  l+=5;
}
int main(){
  int a=1;
  printf("%d\n", a);
  f(a);
  printf("%d\n", a);
  r(a);
  printf("%d\n", a); 
  return 0;
}
W dokumentacji przecież każdy typ jest odnośnikiem i sobie można poczytać.

kod ui->comboBox->insertItems(1, znaki); pewnie dlatego nie działał, bo w ten combobox był pewnie wcześniej pusty i nie było w nim żadnych elementów, a numerowanie zaczyna się od 0

QStringList jest "synonimem" QList<QString>, tyle że jest przystosowany do pracy bezpośrednio z QStringami.

Odp: [C++] QT, zrozumieć pomoc qt...

: 12 sty 2011, 15:13
autor: mikolajs
Różnica jest tylko taka, że jeśli ten obiekt będzie w tej funkcji zmieniony, to poza nią też się zmieni. Ale o ile pamiętam to w Qt to rzadkość, aby obiekt przekazywany przez referencję był modyfikowany, więc nie ma co się tym przejmować.
Zgadza się. Widać to po tym, że w definicji mamy const

Odp: [C++] QT, zrozumieć pomoc qt...

: 12 sty 2011, 16:26
autor: soulreaver1
Dzięki wszystkim za pomoc. Nie działało ponieważ... :bag: nie wywołałem mojej metody żadnym syganłem.