Qt利⽤QFileDialog实现⼀个带预览功能的⽂件选择预览界⾯
Qt 利⽤QFileDialog实现⼀个带预览功能的⽂件选择预览界⾯
需求描述
实现⼀个⽂件预览的功能,FileDialog中切换不同的⽂件,能将⽂件中我们需要展⽰的信息显⽰出来。在实现过程思路就是利⽤Qt⾃带的QFileDialog 以 Qwidget 的⽅式添加到新的 QDialog 中,然后新增⼀个预览区域的QWidget来实现具体预览交互功能,在实现过程中遇到如下问题:
由于 使⽤了qss⽂件进⾏界⾯优化,QFileDialog部分控件有效果,⼗分不协调。qt listview
需要实现的功能点
QFileDialog的界⾯设置和优化
去掉QFileDialog右下⾓拖动改变⼤⼩功能
file_dialog->setSizeGripEnabled(false);
QFileDialog切换⽂件的信号处理,利⽤QFileDialog原有的打开和取消功能来实现QDialog的对应功能
QFileDialog 去掉右键菜单和对应的中⽂设置
主要代码
界⾯设置代码
void tdms_widget_t::create_file_dialog() {
auto  file_dialog = new QFileDialog(this, Qt::SubWindow | Qt::FramelessWindowHint);
file_dialog->setAttribute(Qt::WA_TranslucentBackground);
file_dialog->setOption(QFileDialog::DontUseNativeDialog, true);
//去掉右下⾓的拖动
file_dialog->setSizeGripEnabled(false);
//设置⽂件类型
file_dialog->setNameFilter(u8"TDMS⽂件(*.tdms)");
/
/切换位置
file_dialog->setLabelText(QFileDialog::LookIn, u8"⽂件⽬录:");
file_dialog->setLabelText(QFileDialog::FileName, u8"⽂件名字:");
file_dialog->setLabelText(QFileDialog::FileType, u8"⽂件类型:");
file_dialog->setLabelText(QFileDialog::Accept, u8"打开");
file_dialog->setLabelText(QFileDialog::Reject, u8"取消");
//设置模式
file_dialog->setViewMode(QFileDialog::List);
//设置stylesheet
QListView* pListView = file_dialog->findChild<QListView*>("listView");
if (pListView) {
pListView->setContextMenuPolicy(Qt::NoContextMenu);
}
QTreeView* pTreeView = file_dialog->findChild<QTreeView*>("treeView");
if (pTreeView) {
pTreeView->header()->setDefaultAlignment(Qt::AlignLeft | Qt::AlignVCenter);
pTreeView->setContextMenuPolicy(Qt::NoContextMenu);
}
QLineEdit* fileNameEdit = file_dialog->findChild<QLineEdit*>("fileNameEdit");
if (fileNameEdit) {
fileNameEdit->setContextMenuPolicy(Qt::NoContextMenu);
}
QComboBox* fileTypeCombo = file_dialog->findChild<QComboBox*>("fileTypeCombo");
if (fileTypeCombo) {
fileTypeCombo->setMinimumHeight(24);
fileTypeCombo->setMinimumHeight(24);
fileTypeCombo->setView(new QListView());
}
QComboBox* lookInCombo = file_dialog->findChild<QComboBox*>("lookInCombo");
if (lookInCombo) {
lookInCombo->setMinimumHeight(24);
lookInCombo->setView(new QListView());
}
QString style_str = "QPushButton{color:#ffffff;font - size:14px;background: #29363A;border:1px solid #3BB09E;margin: 2px;}"                  "QPushButton::hover{color:#3CB09E;background: #29474A;}"
"QPushButton::disabled{color:#ffffff;border: 1px solid #333333;}";
QDialogButtonBox* buttonBox = file_dialog->findChild<QDialogButtonBox*>("buttonBox");
if (QPushButton* button = buttonBox->button(QDialogButtonBox::Open)) {
button->setStyleSheet(style_str);
button->setFixedSize(80, 32);
}
if (QPushButton* button = buttonBox->button(QDialogButtonBox::Cancel)) {
button->setStyleSheet(style_str);
button->setFixedSize(80, 32);
}
//连接关联函数
//buttonBox->disconnect();
connect(buttonBox, SIGNAL(accepted()), this, SLOT(onAccepted()));
connect(buttonBox, SIGNAL(rejected()), this, SLOT(onRejected()));
//
connect(file_dialog, SIGNAL(fileSelected(const QString)), this, SLOT(file_selected(const QString)));
//连接⽂件切换的信号作为预览功能的⼊⼝
connect(file_dialog, SIGNAL(currentChanged(const QString)), this, SLOT(file_selected(const QString)));
main_layout_->addWidget(file_dialog,1);
}
void tdms_widget_t::onAccepted() {
this->accept();
}
void tdms_widget_t::onRejected() {
this->reject();
}
void tdms_widget_t::channel_changed(int channel)
{
file_path_.channel_ = channel;
rtsa_file_setting(rtsa_, file_path_);
::rtsa_start(rtsa_, runtime_type_t::ANALYSIS);
}
void tdms_widget_t::file_selected(const QString data) {
path_ = data;
read_tdms_info();
}
效果展⽰

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。