这个主要是第十篇博文的一个验证。第十二篇将贴上一个完整的Qt记事本的程序代码。
这个效果图:
.
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();
}
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;
QAction *searchAction;
QLabel *msgLabel;
void open();
void search();
};
#endif // MYAPP_H
myapp.cpp
#include "myapp.h"
#include "searchDialog.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();
//菜单和工具是同一个Action
openAction = new QAction(tr("&open"), this);
openAction->setShortcut(QKeySequence::Open);
openAction->setStatusTip(tr("Open a file."));
searchAction = new QAction(tr("&search"), this);
searchAction->setStatusTip(tr("Search a file"));
connect(openAction,&QAction::triggered,this,&MyApp::open);
connect(searchAction, &QAction::triggered, this, &MyApp::search);
QMenu *file = menuBar()->addMenu(tr("&File"));
file->addAction(openAction);
file->addAction(searchAction);
QToolBar *toolBar = addToolBar(tr("&File"));
toolBar->addAction(openAction);
toolBar->addAction(searchAction);
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);
}
}
void MyApp::search()
{
//模态对话框
//searchDialog search;
//search.exec();
// 非模态对话框
searchDialog *search = new searchDialog(this);
search->show();
}
searchDialog.h
#ifndef SEARCHDIALOG_H
#define SEARCHDIALOG_H
#include <qdialog.h>
class QPushButton;
class searchDialog : public QDialog
{
Q_OBJECT
public:
searchDialog(QWidget *parent = 0);
~searchDialog();
private:
QPushButton *quit_Button;
void exit();
};
#endif // SEARCHDIALOG_H
searchDialog.cpp
#include "myapp.h"
#include "searchDialog.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 <qmessagebox.h>
#include <qdialog.h>
#include <qboxlayout.h>
#include <qinputdialog.h>
searchDialog::searchDialog(QWidget *parent)
: QDialog(parent)
{
setMinimumSize(200,120);
setMaximumSize(200,120);
quit_Button = new QPushButton(tr("quit"));
quit_Button->setDefault(true);
quit_Button->setGeometry(100,100,80,100);
//QObject::connect(quit_Button, SIGNAL(clicked()), this, SLOT(close()));
connect(quit_Button, &QPushButton::clicked, this, &searchDialog::exit);
//如果是非模态对话框的话,这条语句是需要的,它可以防止内存泄露
setAttribute(Qt::WA_DeleteOnClose);
QHBoxLayout *mainLayout = new QHBoxLayout;
mainLayout->addWidget(quit_Button);
setLayout(mainLayout);
}
searchDialog::~searchDialog()
{
}
void searchDialog::exit()
{
QString text = QInputDialog::getText(this, "nimeide","input your name:");
QMessageBox::information(NULL, "INFORMATION", text);
this->close();
}