QT传输函数控件设计4 接着进行融合
既上节之后,我们要定义一个打开文件的菜单,用于打开我们想用来可视化的文件:
在头文件类中声明:
pravite:
QAction *action;
QToolBar *mainToolBar;
QStatusBar *statusBar;
QMenuBar *menuBar;
QMenu *menu;
void setup();
然后写实体:(注意这里面有些东西是从以前自己生成的.ui文件里拷贝的,所以有些内容其实可以去掉,比如setObjectName函数。这里懒得去掉了。)
action = new QAction(this);
action->setObjectName(QStringLiteral("action"));
mainToolBar = new QToolBar(this);
mainToolBar->setObjectName(QStringLiteral("mainToolBar"));
addToolBar(Qt::TopToolBarArea, mainToolBar);
menuBar = new QMenuBar(this);
menuBar->setObjectName(QStringLiteral("menuBar"));
menuBar->setGeometry(QRect(0, 0, 1017, 23));
menu = new QMenu(menuBar);
menu->setObjectName(QStringLiteral("menu"));
setMenuBar(menuBar);
menuBar->addAction(menu->menuAction());
定义菜单栏,没有什么可解释的。
setWindowTitle(QApplication::translate("MyMainWindow", "Feimos", Q_NULLPTR));
action->setText(QApplication::translate("MyMainWindow", "Choose Dir", Q_NULLPTR));
menu->setTitle(QApplication::translate("MyMainWindow", "File", Q_NULLPTR));
设置标题。
action->setShortcuts(QKeySequence::Open);//设置快捷键
action->setStatusTip(tr("打开文件夹"));//添加状态栏的提示语句。状态栏就是主窗口最下面的一条。现在我们的程序还没有添加状态栏,因此你是看不到有什么作用的。
connect(action, &QAction::triggered, this, &MyMainWindow::open);
menu->addAction(action);
然后连接动作,动作函数的名字叫 open()。
然后我们在MyMainWindow类(我们的主窗体类)里声明:
private:
QString DcmPathName;
private:
void open();
在VS上不一定需要声明到槽函数,这里也不做过多解释,反正输出程序提示如果找不到槽,就声明为:
private slots:
void open();
包含下面几个头文件:
#include <QMessageBox>
#include <QString>
#include <QFileDialog>
#include <QFileInfo>
#include <QStringList>
之后我们开始定义open()函数:
void MyMainWindow::open(){
do {
int questionResult = 0;
DcmPathName = QFileDialog::getExistingDirectory(this, tr("dcm file path"), QDir::currentPath()) + "\\";
if (DcmPathName == QString("\\"))//如果直接关闭了对话框
{
break;
}
QDir dir(DcmPathName);
dir.setFilter(QDir::Files);
QStringList filters;//加过滤器
filters << "*.dcm";//只找后缀为.dcm的文件
dir.setNameFilters(filters);
QFileInfoList list = dir.entryInfoList();
QFileInfo fileInfo;
QStringList filelist;
foreach(fileInfo, list)
{
filelist << fileInfo.fileName();
}
//上面主要是在统计路径下,我们目标.dcm文件数量
int dcmCount = filelist.count();
//调试用的,可以注释掉
//DebugText::getDebugText()->addContents( QString::number(dcmCount));
if (dcmCount>20) {
break;
}
else {
//数量太少,或者出现中文路径文件读不到,或者目录里没有.dcm文件,都不行
questionResult = QMessageBox::question(this, tr("dcm file path"),
"Do not use path in Chinese ! \n Or no dcm file exists !\
\n Do you want to find another path ?",
QMessageBox::Yes, QMessageBox::No);
if (questionResult == QMessageBox::No) {
break;
}
}
} while (1);
}
Open()函数的意义在于找到一个里面有一堆用来显示的dcm数据的文件夹。
现在我们的菜单功能已经设计好了,下一节争取我们就能显示出整个图像。