2011-05-13 3 views
0

나는 시네마 좌석을 나타 내기 위해 qpushbutton을 너무 많이 만들었습니다. 사용자가 좌석을 구입 한 후에 나는이 자리를 비활성화했습니다. 이전에 비활성화 된 버튼이 비활성화 된 것을 확인하기 만하면됩니다. 이 비활성화 된 버튼을 txt 파일에 저장하고 이름을 읽었지만 위젯 Qpushbuttons로 할당 할 수 없습니다. 그것을 해결할 방법이 있습니까?프로그램을 다시 실행할 때 비활성화 된 버튼을 비활성화하는 방법

답변

1

데이터 구조 문제만큼이나 버튼 문제는 아닙니다. 어떻게 든 사용 가능한 좌석과 예약석의 부기를 돕는 데이터 구조에 단추/좌석을 연결해야합니다. 일단 프로그램을 닫으면 데이터를 파일이나 데이터베이스에 기록한 다음 응용 프로그램을 열 때 다시 읽을 수 있습니다. 예약 된 자리의 버튼을 다시 비활성화 할 수 있습니다.

// list of all seats in order (true means seat is taken, false seat is still free) 
QList<bool> seats; 

// set some test values 
seats.append(true); 
seats.append(true); 
seats.append(false); 
seats.append(true); 

// file where the seats will be stored 
QFile file("seats.dat"); 

// save to file 
file.open(QIODevice::WriteOnly); 
QDataStream out(&file); 
out << seats; 
file.close(); 

// remove all seats (just for testing) 
seats.clear(); 

// read from file 
file.open(QIODevice::ReadOnly); 
QDataStream in(&file); 
in >> seats; 
file.close(); 

// simple debug output off all seats 
qDebug() << seats; 

// you could set the buttons enabled state like this 
QList<QPushButton*> buttons; // list of your buttons in the same order as the seat list of course 
for (int i = 0; i < seats.count(); ++i) 
    buttons[i]->setEnabled(!seats.at(i)); // disables all seats which are already taken 

이 떨어져 좌석의 전체 목록을 직렬화하는 QDataStream를 사용 물론 단순한 솔루션입니다,하지만 당신은 할 수 있습니다

내가 Qt를 함께 몇 가지 빠른 예를했습니다
+0

텍스트 파일에서 버튼 이름을 읽었지만 qpushbutton 또는 qpushbutton 이름으로 할당 할 수 없습니다. 그것은 qpushbutton으로 저장 될지도 모르지만 나는 그것을하는 방법을 모른다. – Cengaver

+0

왜 혼자 힘들어합니까? 정말 간단한 (또는 단순한) 솔루션은 어떻습니까? 100 석이 있다고 가정 해보십시오. 두 벡터를 만듭니다. 하나는 100 개의 부울 (true : 예약 됨, false : 사용 가능)이고 하나는 100 (참조) 버튼이 있습니다. 좌석 3은 예약되어 있습니까? 그런 다음 하나의 벡터에서 부울 3을 true로 설정하고 다른 벡터에서 버튼 3을 비활성화하십시오. 저장하고로드하는 것은 불리언 (또는 당신이 그것을 위해 사용하고자하는 데이터 타입)입니다. 이것을 말하는 것은 하나의/유일한/최선의 방법이지만, 시작해야합니다. – Bart

+0

네 말이 맞지만 어떻게 해야할지 모르겠다. :) 미안하지만 너를 방해한다. – Cengaver

1

는, 내가 당신을 도울 것입니다 희망

관련 문제