2013-12-11 7 views
0

방금 ​​시작한 Qt를 사용하여 은 문서, Google, 예제 등을 통해 살펴 보았습니다. 간단한 예제 (작동중인 마음이 있습니다) 을 찾으려고 노력했습니다. 글쎄, 나는 내 대답에 비틀 거리며,이 접근법이 나중에 코드가 복잡해지면서 문제를 일으킬 지 궁금해하고 있었다. 이 예제에는 필요한 것보다 많은 포함이 있지만 작업 코드에서 직접 가져온 것입니다. mainwindow.h는 : 제가 qt5 디자이너가 fileopen을 사용하여 lineedit에 파일 경로를 표시하는 데 문제가 있습니까?

private slots: 
    void vpkButton_clicked(); 

및 UI :: * MainWindow를 UI 후

첨가; 내가 추가했습니다 QLineEdit * vpkPathTxt; mainwindow.cpp에서 : 내가 적절한 슬롯에 내 UI 버튼을 연결하는
connect(this->ui->vpkButton, SIGNAL(clicked()), this, SLOT(vpkButton_clicked())); 

을 추가

ui->setupUi(this); 

후, 문제는 라인 편집에 표시 할 vpkButton_clicked()에서 문자열을 받고 있었다 m에서

vpkPathTxt = this->ui->vpkPathTxt; 

기능 : 나는 내가이 다음에 추가 된 근무 결국 무엇을 , 디자이너에서 만든 y를 MAIN.CPP 매우 간단했다 : (상단 외부 빈 공간에서 QString 선언)

void MainWindow::vpkButton_clicked() 
{ 
    vpkName = QFileDialog::getOpenFileName(this, 
     tr("Open VPK File"), "~/", tr("VPK Files (*_dir.vpk)")); 
    vpkPathTxt->setText(vpkName); 
    qDebug() << vpkName; 
} 

내가 요구하고있는 이유는 신뢰성이 조금 너무 쉬운 것, 그리고 내가 그것을 본 havent 한 사실이 완료 때문이다 이렇게하면 모든 입력 환영합니다. thankyou

+0

왜 'ui-> vpkPathTxt'를 가리키는 다른 변수'vpkPathTxt'를 사용합니까? 일부 타이핑을 저장하기 만하면됩니까? 'ui' 포인터 뒤에있는 아이디어는 모든 UI 요소를 캡슐화하여 클래스의 로직 요소에 필요한 다른 변수와 "간섭하지"않는다는 것입니다.또한'this->'는 선택적이다. 나는 그것을 떠날거야. – leemes

+0

왜냐하면'vpkPathTxt'는 다른 문장에서 사용하는 초기화되지 않은 포인터이기 때문입니다. 그것들을'ui-> vpkPathTxt'로 대체하고 헤더 파일의 변수를 제거하십시오. 만약 당신이 올바르게 이해했다면 당신은'Ui :: MainWindow * ui' 아래의 헤더에 그러한 변수가 있습니다. – leemes

+0

없이 "vpkPathTxt = this-> ui-> vpkPathTxt;" "ui-> vpkPathTxt.setText (vpkName);"을 사용하여 경로가 표시 될 파일을 선택할 때 앱이 단순히 사라집니다. " 비참하게 실패합니다. 아마도 적절한 연결이 없기 때문일 것입니다./ – angjminer

답변

0

슬롯에 하나의 문제는 사용자가 "파일 열기"대화 상자를 무시한 경우를 고려하지 않는다는 것입니다. 이 경우, 반환 값은 널 (null) 문자열 아니었다면 당신은 단지 당신의 논리로 진행해야하므로, 널 QString를 반환 QFileDialog::getOpenFileName 기능 :

if (!vpkName.isNull()) { 
    ... 
} 

다음과 내가 몇 가지 가정을 만들어으로 두 번째 문제는 귀하의 전체 코드가 보이지 않기 때문에 :

사용자가 대화 상자에서 선택한 파일 이름을 사용하여 파일을로드하고 싶습니다. 그러나 사용자가 직접 편집 할 수있는 줄 편집에서도 파일 이름을 설정합니다. 실제 파일 로딩은 다른 단계 (즉, 다른 버튼을 클릭 한 후)에서 발생하므로 사용자가 직접 파일 편집을 한 후에는 로컬 변수 vpkName과 같지 않을 것입니다.

파일을로드 할 때 변수 vpkName 대신 줄 편집 내용을 읽었으므로 손으로 직접 편집하면됩니다.

다른 방법은 또한 줄 편집 편집을보고 변수의 변경 사항을 반영하는 것입니다. 그런 다음 나중에 파일을로드 할 때 행 편집 대신 변수를 읽는 것이 좋습니다.

+0

고마워요. 마우스 오른쪽 버튼을 클릭하여 슬롯을 추가하면 큰 효과를 볼 수 있습니다. 오늘 밤 너는 멋진 꿈을 꾸고 있니? :) – angjminer

관련 문제