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下的开源机器学习软件包,目前实现的机器学习算法主要包含有协同过滤/推荐引擎,聚类和分类三个部 ...
随机推荐
- HTTP发送请求模拟
using System; using System.Collections.Generic; using System.Text; using System.Data; using System.I ...
- 【转】ubuntu12.04完美安装QQ2012、QQMusic、Foxmail等--wine
原文网址:http://blog.csdn.net/hanmengaidudu/article/details/17616921 其实在这之前,试过无数次的wine模拟,没有一次成功的,也不能说是不成 ...
- bzoj1188
题目:http://www.lydsy.com/JudgeOnline/problem.php?id=1188 一道非常好的SG函数题,加深了对博弈论的理解. 以前做的SG函数的题,都是每个瓶子看成一 ...
- poj2429:因数分解+搜索
题意:给定gcd(a,b)和lcm(a,b) 求使得a+b最小的 a,b 思路:结合算数基本定理中 gcd lcm的质因子表示形式 把lcm(a,b)质因数分解 以后 通过dfs找到 a+b最小的a ...
- genymotion+Oracle VM VirtualBox + eclipse + appium 脚本运行慢解决步骤
genymotion+Oracle VM VirtualBox + eclipse + appium 脚本运行慢解决步骤 1.lenove 机器启动时按F1 进入bios 设置,设置cpu virtu ...
- 用Scertify Professional实现代码审查
用Scertify Professional实现代码审查 作者:chszs,转载需注明.博客主页: http://blog.csdn.net/chszs Scertify Professional是一 ...
- Smack+Openfire 接收和发送文件
转载请注明出处:http://blog.csdn.net/steelychen/article/details/37958839 发送文件须要提供准确的接收放username称(例:user2@192 ...
- Difference between enabled and userInteractionEnabled properties
I read through the documentation, and here are my findings. UIButton inherits from UIControl the boo ...
- c# 鼠标操作
1#region 3using System; 4using System.Runtime.InteropServices; 6#endregion 8namespace Windows.Forms. ...
- [转载]VIM命令合集
Vim命令合集 http://www.cnblogs.com/softwaretesting/archive/2011/07/12/2104435.html 命令历史 以:和/开头的命令都有历史纪录, ...