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 }
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Dialog pops up in ApplicationIn the daily development process, it is often necessary to control some information on a global scale. For example, netw...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.