Qt 프로 그래 밍 구현 QFileDialog 에 사용자 정의 widget 추가

13752 단어 dialog
인터넷 검색 에서 찾 은 방법 은 다음 과 같다.
http://www.qtforum.org/article/20841/how-to-add-a-qwidget-in-qfiledialog.html#post78422
http://www.qtcentre.org/threads/42858-Creating-a-Custom-FileOpen-Dialog
http://stackoverflow.com/questions/16987916/add-widgets-to-qfiledialog
 
 
사실 앞의 두 링크 에 제 공 된 방법 은 모두 제 가 시 도 했 습 니 다.통 하지 않 습 니 다.이런 방법 들 은 모두 QFileDialog 에 widget 을 직접 추가 하 는 것 입 니 다.먼저 QFileDialog 의 layot 를 얻어 야 합 니 다.그들 은 예전 의 Qt 버 전 을 사 용 했 을 것 입 니 다.어차피 5.0.0 이상 의 버 전 은 쓸모 가 없 으 니 직접 프로그램 을 사용 하여 Abort 를 만 들 었 습 니 다.이것 은 그들 이 말 해도 추천 하지 않 는 다.Qt 버 전 내부 의 데이터 구 조 는 끊임없이 변화 하기 때문이다.
 
그래서 다음 에 저 는 교묘 한 방식 으로 QFileDialog 에 widget 을 직접 추가 하 는 것 을 돌 렸 습 니 다.실질 적 으로 QDialog 를 만 들 고 QFileDialog 를 widget 으로 QDialog 에 추가 하 는 것 입 니 다.
 
다음은 데모:
myFileDlg.h
 1 #ifndef MY_FILE_DIALOG_H

 2 #define  MY_FILE_DIALOG_H

 3 #include <QLineEdit>

 4 #include <QDialog>

 5 /*class MyFileDialog : public QFileDialog

 6 {

 7 public:

 8     MyFileDialog(QWidget *parent);

 9 private:

10     QLineEdit *line_edit;

11     QFileDialog *p;

12 };*/

13 

14 class Dialog : public QDialog

15 {

16     

17 public:

18     Dialog(QWidget *parent = 0);

19     QFileDialog* GetFileDlg()

20     {

21         return m_filedlg;

22     }

23 

24 

25 private:

26 

27     QFileDialog *m_filedlg ;

28     QLabel *textLabel;

29     QLineEdit *textEdit ;

30 

31     QGridLayout *mainLayout ;

32 

33     QString openFilesPath;

34 

35 };

36 

37 

38 

39 

40 #endif

myFileDlg.cpp
 1 #include <QWidget>

 2 #include <QGridLayout>

 3 #include <QFileDialog>

 4 #include <assert.h>

 5 #include <QHBoxLayout>

 6 #include <QVBoxLayout>

 7 #include <QLabel>

 8 #include <QDialog>

 9 

10 #include "myFileDlg.h"

11 

12 

13 

14 Dialog::Dialog(QWidget *parent): QDialog(parent)

15 {

16 

17     /***********************************************************/

18 

19     QFileDialog *m_filedlg = new QFileDialog(this,Qt::SubWindow);

20 

21     m_filedlg->setOption(QFileDialog::DontUseNativeDialog,true);

22 

23     if(m_filedlg->testOption(QFileDialog::DontUseNativeDialog))

24         printf("cuccee
"); 25 26 27 28 //m_filedlg ->getOpenFileName(0,"Select File","D:\\","Video Files (*.avi *.mpg);;3D STL Files (*.stl)",NULL,QFileDialog::DontUseNativeDialog); 29 30 31 32 //m_filedlg->setWindowFlags(Qt::SubWindow) ; 33 34 /***********************************************************/ 35 36 textLabel = new QLabel( tr(" StepX: ") ); 37 textEdit = new QLineEdit(); 38 39 mainLayout = new QGridLayout(this); 40 41 42 mainLayout->addWidget( m_filedlg , 0 , 0 , 2 , 1 ) ; 43 mainLayout->addWidget( textLabel , 2 , 0 , 1 , 1 ) ; 44 mainLayout->addWidget(textEdit , 2 , 1 , 1 , 1 ) ; 45 46 47 /***********************************************************/ 48 49 //setMinimumHeight( 400 ) ; 50 //setMinimumWidth( 600 ) ; 51 52 setSizePolicy( QSizePolicy( QSizePolicy::Expanding , QSizePolicy::Expanding ) ) ; 53 54 setLayout(mainLayout); 55 56 57 }

main.cpp
 1 #include <stdio.h>

 2 #include <QApplication>

 3 #include <QString>

 4 #include <QtCore/QtPlugin>

 5 #include <QFileDialog>

 6 #include <QLabel>

 7 #include <QLineEdit>

 8 #include <QGridLayout>

 9 #include "myFileDlg.h"

10 

11 

12 int main(int argc, char* argv[])

13 {

14     Q_IMPORT_PLUGIN(QWindowsIntegrationPlugin);//               ,       ,      。      ,http://www.cnblogs                                                   //.com/foohack/p/3909320.html

15     QApplication app(argc,argv);

16     

17 

18     

19     

20     

21     

22     

23 

24      Dialog *dialog =new Dialog(0);

25 

26     // dlg ->getOpenFileName(0,"Select File","D:\\","Video Files (*.avi *.mpg);;3D STL Files (*.stl)",NULL);

27      dialog->setWindowTitle("Select BIG Image File");  

28      dialog->setModal(true);  

29      //dialog->show( ) ;  

30 

31      dialog->exec();

32     return app.exec();

33 

34     

35     

36 }

좋은 웹페이지 즐겨찾기