1. 程式人生 > >九、Qt檔案選擇對話方塊

九、Qt檔案選擇對話方塊

myapp.h

#ifndef MYAPP_H
#define MYAPP_H

#include <QtWidgets/QMainWindow>
#include "ui_myapp.h"
class QLabel;
class QAction;

class MyApp : public QMainWindow
{
	Q_OBJECT

public:
	MyApp(QWidget *parent = 0);
	~MyApp();

private:
	Ui::MyAppClass ui;
	QAction *openAction;
	QLabel *msgLabel;
	void open();
};

#endif // MYAPP_H

myapp.cpp
#include "myapp.h"
#include <qpushbutton.h>
#include <qmenu.h>
#include <qmenubar.h>
#include <qkeysequence.h>
#include <qtoolbar.h>
#include <qlabel.h>
#include <qstatusbar.h>
#include <qaction.h>
#include <qstring.h>
#include <qfiledialog.h>
#include <qmessagebox.h>
MyApp::MyApp(QWidget *parent)
	: QMainWindow(parent)
{
	//setMinimumSize(200,120);
	//setMaximumSize(200,120);
	//QPushButton *quit = new QPushButton("Quit");
	//quit->setGeometry(100,100,80,100);
	//QObject::connect(quit, SIGNAL(clicked()), qApp, SLOT(quit()));
	//quit->show();

	openAction = new QAction(tr("&open"), this);
	openAction->setShortcut(QKeySequence::Open);
	openAction->setStatusTip(tr("Open a file."));
	connect(openAction,&QAction::triggered,this,&MyApp::open);

	QMenu *file = menuBar()->addMenu(tr("&File"));
	file->addAction(openAction);

	QToolBar *toolBar = addToolBar(tr("&File"));
	toolBar->addAction(openAction);

	msgLabel = new QLabel;
	msgLabel->setMinimumSize(msgLabel->sizeHint());
	msgLabel->setAlignment(Qt::AlignHCenter);

	statusBar()->addWidget(msgLabel);
	//刪除狀態列的短豎線(當沒有狀態文字時出現的短豎線)
	statusBar()->setStyleSheet(QString("QStatusBar::item{border: 0px}"));


	//ui.setupUi(this);

}

MyApp::~MyApp()
{

}

void MyApp::open()
{
	QString path = QFileDialog::getOpenFileName(this, tr("Open Image"), ".", tr("Image Files(*.jpg *.png)"));
	if(path.length()==0)
	{
		QMessageBox::information(NULL, tr("Path"), tr("You didn't select any file."));
	}
	else
	{
		QMessageBox::information(NULL, tr("Path"), tr("You selected ") + path);
	}
}

main.cpp
#include "myapp.h"
#include <qapplication.h>
int main(int argc, char *argv[])
{
	QApplication app(argc, argv);
	MyApp my;
	my.show();
	return app.exec();
}

執行:




說明:

1、主要是新增一個QAction *openAction,這個用來關聯開啟對話方塊的操作,選單和工具欄都是同一個QAction:

connect(openAction,&QAction::triggered,this,&MyApp::open);

然後使用QFileDialog中的getOpenFileName()這個函式獲取選中的檔名:
QString path = QFileDialog::getOpenFileName(this, tr("Open Image"), ".", tr("Image Files(*.jpg *.png)"));

這個函式定義了對話方塊的標題,過濾,返回的是選中的檔案目錄。