Как использовать Qvector <QPushButton> - PullRequest
0 голосов
/ 23 апреля 2011

QVector<QPushButton*> buttonList; глобальная переменная
void SeatReservImpl::selectSeat(){ выберите место в графическом интерфейсе, который нажимается кнопкой

QPushButton* clickedButton= (QPushButton*)(sender()); выберите нажатую кнопку
buttonList.insert(clickedButton); добавить в список, но выдает ошибку: нет соответствующей функции для вызова QVector :: insert (QPushButton * &)

}

void SeatReservImpl::buyTicket(){ купить выбранные места при нажатии кнопки купить
for ( pb=buttonList.first(); pb != 0; pb=buttonList.next() ) { pb->setPalette(QPalette(QColor(255,0,0))); изменить цвет кнопок
}
Проблема в; код неправильный и я не знаю, как их исправить, и что я хочу сделать, это как я могу добавить нажимаемые кнопки в QVector или Qlist и как использовать список или вектор и добраться до сохраненной кнопки внутри списка

Edit:

Вот мой код:

#include "SeatReservImpl.h"
#include <qmessagebox.h>
#include <stdio.h>
#include <SeatReserv.h>
#include <qcheckbox.h>
#include <qpushbutton.h>
#include <qbuttongroup.h>
#include <qbutton.h>
#include <qobject.h>
#include <qwidget.h>
#include <qcolor.h>
#include <qpalette.h>
#include <string>
#include <stdlib.h>
#include <iostream>
#include <qlist.h>
#include <qvector.h>
using namespace std;

QString slcSeat[10];
int i;
QList<QPushButton*> buttonList;

void SeatReservImpl::selectSeat()
{

QString slcSeat[10];

QPushButton* clickedButton = (QPushButton*)(sender());
QString buttName=clickedButton->name();
buttonList.append(clickedButton);
slcSeat[i]=buttName;
i++;
clickedButton->setPalette(QPalette(QColor(174,0,255)));

}

void SeatReservImpl::buyTicket(){

FILE *pfile;
char status[2];
int m;
int flag=0;
QString buttName,buttName1;
for(m=0;m<i;m++){
    buttName=slcSeat[m];
    system("wget -O status.txt http://embsys.heliohost.org/find.php?Seat="+buttName);
    pfile=fopen("status.txt","r+");       
    fgets(status,sizeof status,pfile);
    if(strcmp(status,"0")!=0)
        flag=1;
    }
if(flag){
    QMessageBox::information( this, "", "You Have the Seats", QMessageBox::Ok );
    QListIterator<QPushButton*> iter(buttonList);
    while (iter.hasNext()) {
        QPushButton *pb = iter.next();
        pb->setPalette(QPalette(QColor(255,0,0)));
            system("wget http://embsys.heliohost.org/buy.php?Seat="+buttName);
        }
}else{
    QMessageBox::information( this, "","\t\t SORRY!!!\n One of The Seats Has Been Already Sold",    QMessageBox::Ok );
    }

    i=0;

}

Но я получаю ошибки компилятора:

И ошибки есть;

SeatReservImpl.cpp: In member function ‘virtual void SeatReservImpl::selectSeat()’:
SeatReservImpl.cpp:32: error: no matching function for call to ‘QList::append(QPushButton*&)’ ../qtopia-2.2.0-FriendlyARM/qt2/include/qlist.h:61: note: candidates are: void QList::append(const type*) [with type = QPushButton*]
SeatReservImpl.cpp: In member function ‘virtual void SeatReservImpl::buyTicket()’:
SeatReservImpl.cpp:58: error: ‘class QListIterator’ has no member named ‘hasNext’
SeatReservImpl.cpp:59: error: ‘class QListIterator’ has no member named ‘next’

Ответы [ 3 ]

1 голос
/ 23 апреля 2011

Используйте что-то вроде этого:

QList<QPushButton*> buttonList;


// add an item:
buttonList.append(clickedButton);

// iterate over all items
QListIterator<QPushButton*> iter(buttonList);
while (iter.hasNext()) {
  QPushButton *pb = iter.next();
  ...
}

Существует множество других способов, и QList не обязательно является наиболее подходящим классом контейнера. Пожалуйста, прочитайте справочную документацию Классы контейнеров для получения информации обо всех возможных вариантах.

Edit:

Если по какой-то причине вы используете очень старую версию Qt, класс QList (и итератор) работают не так. Они немного странные. У меня нет ничего, чтобы проверить это, так что YYMV. Глядя на документы для QList in Qt 2.3:

QList<QPushButton> buttonList; // note: not QPushButton*

// add an item:
buttonList.append(clickedButton); // same as above

// iterate over all items
QListIterator<QPushButton> iter(buttonList);  // note: not QPushButton*
for ( ; iter.current(); ++iter ) {
  QPushButton *pb = iter.current();
  ...
}
0 голосов
/ 24 апреля 2011
#include "SeatReservImpl.h"
#include <qmessagebox.h>
#include <stdio.h>
#include <SeatReserv.h>
#include <qcheckbox.h>
#include <qpushbutton.h>
#include <qbuttongroup.h>
#include <qbutton.h>
#include <qobject.h>
#include <qwidget.h>
#include <qcolor.h>
#include <qpalette.h>
#include <string>
#include <stdlib.h>
#include <iostream>
#include <qlist.h>
#include <qvector.h>
using namespace std;

QString slcSeat[10];
int i;
QList<QPushButton*> buttonList;

void SeatReservImpl::selectSeat()
{

QString slcSeat[10];

QPushButton* clickedButton = (QPushButton*)(sender());
QString buttName=clickedButton->name();
buttonList.append(clickedButton);
slcSeat[i]=buttName;
i++;
clickedButton->setPalette(QPalette(QColor(174,0,255)));

}

void SeatReservImpl::buyTicket(){

FILE *pfile;
char status[2];
int m;
int flag=0;
QString buttName,buttName1;
for(m=0;m<i;m++){
    buttName=slcSeat[m];
    system("wget -O status.txt http://embsys.heliohost.org/find.php?Seat="+buttName);
    pfile=fopen("status.txt","r+");       
    fgets(status,sizeof status,pfile);
    if(strcmp(status,"0")!=0)
        flag=1;
    }
if(flag){
    QMessageBox::information( this, "", "You Have the Seats", QMessageBox::Ok );
    QListIterator<QPushButton*> iter(buttonList);
    while (iter.hasNext()) {
        QPushButton *pb = iter.next();
        pb->setPalette(QPalette(QColor(255,0,0)));
            system("wget http://embsys.heliohost.org/buy.php?Seat="+buttName);
        }
}else{
    QMessageBox::information( this, "","\t\t SORRY!!!\n One of The Seats Has Been Already Sold",    QMessageBox::Ok );
    }

    i=0;

}

> Blockquote

А ошибки есть;

SeatReservImpl.cpp: в функции-члене ‘virtual void SeatReservImpl :: selectSeat ()’:
SeatReservImpl.cpp: 32: ошибка: нет соответствующей функции для вызова «QList :: append (QPushButton * &)» ../qtopia-2.2.0-FriendlyARM/qt2/include/qlist.h:61: примечание: кандидаты: void QList :: append (const type *) [with type = QPushButton *]
SeatReservImpl.cpp: внутри функции-члена ‘virtual void SeatReservImpl :: buyTicket ()’:
SeatReservImpl.cpp: 58: ошибка: у класса QListIterator нет члена с именем hasNext
SeatReservImpl.cpp: 59: ошибка: у класса QListIterator нет члена с именем «следующий»

0 голосов
/ 23 апреля 2011

В качестве дополнения к ответу выше, рекомендуется сделать:

QPushButton* clickedButton= dynamic_cast<QPushButton*>(sender());

и проверьте, был ли акт успешным, а не просто:

QPushButton* clickedButton= (QPushButton*)(sender());
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...