Qt编程之实现在QFileDialog上添加自定义的widget
2014-08-15 10:36
381 查看
上网搜索找到的方法如下:
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的layout,估计是他们用的是以前Qt的版本吧,反正5.0.0以上的版本是没有用了,用了直接程序会Abort。这个他们说了也不推荐用。因为Qt版本内部的数据结构是不断变化的。
所以以下我采用了一种巧妙的方式,绕过了直接在QFileDialog上添加widget,实质上是自己创建一个QDialog,把QFileDialog作为一个widget添加到QDialog里面。
以下是Demo:
myFileDlg.h
myFileDlg.cpp
main.cpp
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的layout,估计是他们用的是以前Qt的版本吧,反正5.0.0以上的版本是没有用了,用了直接程序会Abort。这个他们说了也不推荐用。因为Qt版本内部的数据结构是不断变化的。
所以以下我采用了一种巧妙的方式,绕过了直接在QFileDialog上添加widget,实质上是自己创建一个QDialog,把QFileDialog作为一个widget添加到QDialog里面。
以下是Demo:
myFileDlg.h
#ifndef MY_FILE_DIALOG_H #define MY_FILE_DIALOG_H #include <QLineEdit> #include <QDialog> /*class MyFileDialog : public QFileDialog { public: MyFileDialog(QWidget *parent); private: QLineEdit *line_edit; QFileDialog *p; };*/ class Dialog : public QDialog { public: Dialog(QWidget *parent = 0); QFileDialog* GetFileDlg() { return m_filedlg; } private: QFileDialog *m_filedlg ; QLabel *textLabel; QLineEdit *textEdit ; QGridLayout *mainLayout ; QString openFilesPath; }; #endif
myFileDlg.cpp
#include <QWidget> #include <QGridLayout> #include <QFileDialog> #include <assert.h> #include <QHBoxLayout> #include <QVBoxLayout> #include <QLabel> #include <QDialog> #include "myFileDlg.h" Dialog::Dialog(QWidget *parent): QDialog(parent) { /***********************************************************/ QFileDialog *m_filedlg = new QFileDialog(this,Qt::SubWindow); m_filedlg->setOption(QFileDialog::DontUseNativeDialog,true); if(m_filedlg->testOption(QFileDialog::DontUseNativeDialog)) printf("cuccee\n"); //m_filedlg ->getOpenFileName(0,"Select File","D:\\","Video Files (*.avi *.mpg);;3D STL Files (*.stl)",NULL,QFileDialog::DontUseNativeDialog); //m_filedlg->setWindowFlags(Qt::SubWindow) ; /***********************************************************/ textLabel = new QLabel( tr(" StepX: ") ); textEdit = new QLineEdit(); mainLayout = new QGridLayout(this); mainLayout->addWidget( m_filedlg , 0 , 0 , 2 , 1 ) ; mainLayout->addWidget( textLabel , 2 , 0 , 1 , 1 ) ; mainLayout->addWidget(textEdit , 2 , 1 , 1 , 1 ) ; /***********************************************************/ //setMinimumHeight( 400 ) ; //setMinimumWidth( 600 ) ; setSizePolicy( QSizePolicy( QSizePolicy::Expanding , QSizePolicy::Expanding ) ) ; setLayout(mainLayout); }
main.cpp
#include <stdio.h> #include <QApplication> #include <QString> #include <QtCore/QtPlugin> #include <QFileDialog> #include <QLabel> #include <QLineEdit> #include <QGridLayout> #include "myFileDlg.h" int main(int argc, char* argv[]) { Q_IMPORT_PLUGIN(QWindowsIntegrationPlugin);//之前上一篇文章有描述过这个问题,必须要加入这行,不然不起作用。运行时会出错,http://www.cnblogs //.com/foohack/p/3909320.html QApplication app(argc,argv); Dialog *dialog =new Dialog(0); // dlg ->getOpenFileName(0,"Select File","D:\\","Video Files (*.avi *.mpg);;3D STL Files (*.stl)",NULL); dialog->setWindowTitle("Select BIG Image File"); dialog->setModal(true); //dialog->show( ) ; dialog->exec(); return app.exec(); }
相关文章推荐
- GridView 实现自定义分页、排序、查询、添加、编辑、多选删除、导出、突出显示等常见应用实现
- gridview 实现自定义分页、排序、查询、添加、编辑、多选删除 之代码规范
- IDocHostUIHandler::ShowContextMenu添加自定义菜单的另类实现
- 润乾api实现自定义报表组并添加参数模板
- Android中实现Launcher功能之二 ----- 添加窗口小部件以及AppWidget的创建详解
- GridView 实现自定义分页、排序、查询、添加、编辑、多选删除 之代码规范
- 来实现android自定义的menu菜单之二:为自定义menu中的线性布局添加事件
- Android中实现Launcher功能之二 ----- 添加窗口小部件以及AppWidget的创建详解
- 织梦(DeDeCMS v5.7 )添加自定义属性的实现方法(图文详解)
- Android导航栏的不同实现(用RadioButton代替Widget、自定义的带有滑动动画的TabHost)
- GridView 实现自定义分页、排序、查询、添加、编辑、多选删除、导出、突出显示等常见应用实现
- GridView 实现自定义分页、排序、查询、添加、编辑、多选删除 之代码规范
- 给windows mobile cab安装包添加setup.dll实现自定义操作(转)
- dedecms自定义字段的添加及如何实现在栏目页首页的调用
- 给EditCtrl添加自定义菜单并实现Copy,Cut和Paste功能
- GridView 实现自定义分页、排序、查询、添加、编辑、多选删除、导出、突出显示等常见应用实现(cs)
- GridView 实现自定义分页、排序、查询、添加、编辑、多选删除
- 图形的绘制,如何使用自定义画笔(颜色,线宽,线形)。如何为程序中添加选项菜单和选项设置对话框,如何使用标准颜色对话框,如何使用字体对话框,在选项对话框中实现预览功能。实现选项对话框和窗口类中的数据交换。如何改变对话框和控件的背景色,如何改变控件的文本颜色,
- 为Android自定义部件(widget)实现自定义的XML配置属性
- 使用XIB自定义一个UIView,然后将这个view添加到controller的view 上(相当于所有界面都通过xib来实现)