Qt编程之实现在QFileDialog上添加自定义的widget
上网搜索找到的方法如下:
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 = );
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 , , , , ) ;
mainLayout->addWidget( textLabel , , , , ) ;
mainLayout->addWidget(textEdit , , , , ) ; /***********************************************************/ //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(); // 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(); }
Qt编程之实现在QFileDialog上添加自定义的widget的更多相关文章
- qt编程入门
面对qt编程,必须先知道qt中常用的类: QPushButton按钮类.QLabel标签类.QMessageBox对话框类.QCheckBox.QAction.QMenu.QStatusBar.QTo ...
- Visual Studio下Qt编程中对中文的处理
Visual Studio下Qt编程中对中文的处理 本文为原创文章,原文地址http://www.cnblogs.com/c4isr/p/qt_develop_in_vs.html Visual St ...
- QT笔记(1)--QT编程环境搭建
一.QT简介 Qt 是一个1991年由奇趣科技开发的跨平台C++图形用户界面应用程序开发框架.它既可以开发GUI程序,也可用于开发非GUI程序,比如控制台工具和服务器.Qt是面向对象的框架,使用特殊 ...
- Qt编程之悲惨世界
最近需要给人写点基于QtWebkit的代码,算是领教了Qt编程的痛苦之处. QNetworkConfigurationManager::isOnline() 只有在编译平台上能运行,拷贝到其他Wind ...
- 零基础学QT编程
吴迪.2010.1 北京航空航天大学出版社 Qt资源 CSDN QT http://bbs.csdn.net/forums/Qt/ QT编程网 http://www.qtbcw.com/ 编程论坛 ...
- Qt编程简介与基本知识
1. 什么是Qt? Qt是一个基于C++的跨平台应用程序和UI开发框架.它包含一个类库,和用于跨平台开发及国际化的工具. 由挪威Trolltech公司开发,后被Nokia收购,目前被Digia公司收购 ...
- Qt编程—去掉标题栏和设置窗口透明用法
学习Qt编程,有时候我们很想做出好看又比较炫的画面,这时就常用到qt上的一些技巧. 这里我以一个小例子来展示qt的这些技巧,此qt编程写的,如图:(去掉标题栏和设置窗口透明后) 代码实现部分: .h文 ...
- 73 QT编程入门
0 引言 最近开始在QT下编程,记录一下遇到的问题以及解决方法. 1 安装下载及学习资料 (1)安装下载链接 安装链接: https://blog.csdn.net/qq_23473839/artic ...
- 利用Mahout实现在Hadoop上运行K-Means算法
利用Mahout实现在Hadoop上运行K-Means算法 一.介绍Mahout Mahout是Apache下的开源机器学习软件包,目前实现的机器学习算法主要包含有协同过滤/推荐引擎,聚类和分类三个部 ...
随机推荐
- op+3g
https://forum.openwrt.org/viewtopic.php?id=44895 http://eko.one.pl/forum/viewtopic.php?id=10269 http ...
- BZOJ2393: Cirno的完美算数教室
2393: Cirno的完美算数教室 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 138 Solved: 83[Submit][Status] D ...
- pthread_mutex_init & 互斥锁pthread_mutex_t的使用
pthread_mutex_init l 头文件: #include <pthread.h> l 函数原型: int pthread_mutex_init( ...
- sql的交叉连接,内连接,左外连接,右外连接,全外连接总结
实践是最好的检验,一直都对这几个连接查询出来的结果有什么不同不大理解,然后自己放一块查询比较了一下,用结果来说话~ 先建两张表如下: t1: id name age 1 张三 18 2 李四 25 t ...
- [置顶] Oracle 11g R2 ASM:了解 Oracle ASM 基本概念
About Oracle ASM Instances About Oracle ASM Disk Groups About Mirroring and Failure Groups About Ora ...
- c语言for语句
首先呢 for语句是由4部分组成 for(表达式1;表达式2;表达式3) 循环体: 注意 1:循环中的表达式用;隔开 表达式1通常用来呢赋初值 表达式2通常用来循环控制也就是循环条件 表达式3通常就是 ...
- 56个PHP开发常用代码
2016/02/14 6203 4 在编写代码的时候有个神奇的工具总是好的!下面这里收集了 50+ PHP 代码片段,可以帮助你开发 PHP 项目. 这些 PHP 片段对于 PHP 初学者也非常 ...
- Swift 2.0 封装图片折叠效果
文/猫爪(简书作者)原文链接:http://www.jianshu.com/p/688c491580e3著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”. 用Swift封装图片折叠效果 b ...
- IOS 6.0+ Autolayout — UITableViewCell 高度调整
要实现的效果 要求: storyboard上的准备工作 建好cell自定义AutoCell 类,关联好控件,事先准备好一些数据源 实现tableview的委托方法 核心部分,HeightForRow方 ...
- [CSAPP笔记][第十二章并发编程]
第十二章 并发编程 如果逻辑控制流在时间上是重叠,那么它们就是并发的(concurrent).这种常见的现象称为并发(concurrency). 硬件异常处理程序,进程和Unix信号处理程序都是大家熟 ...