十一、Qt的简单实现---QMainWindows和QDialog的实现

这个主要是第十篇博文的一个验证。第十二篇将贴上一个完整的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();
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值