九、Qt檔案選擇對話方塊
阿新 • • 發佈:2019-02-09
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)"));
這個函式定義了對話方塊的標題,過濾,返回的是選中的檔案目錄。