要件:[閉じる]ボタンへの変更の子ウィンドウ、およびテキストを起動するために、メインウィンドウの[開く]ボタンをクリックした後、再び子ウィンドウを閉じます!
分析:サブウインドウのポップアップが達成することは難しいことではありません実際には、鍵が開閉機能に同じボタンを達成することである、いくつかの詳細は、ラムダ式を使用する必要があるだけでなく、達成するための方法に注意を払うに必要、次の手順を実行します。
1、最初に新しいプロジェクトを作成します図2に示すように、childWin子ウィンドウという名前のファイルを作成し、図1に示した空のファイルウィンドウを作成し、プロジェクトを右クリックし、新しいファイルを追加]を選択し、C ++クラスの種類を選択して、QWidgetのベースを選択します。
図2に示すように、ファイルwidget.hコードは以下、メインウィンドウで選択された公開クラスと子ウィンドウが作成されるボタンオブジェクトを使用できるように、グローバルにあるを追加し、これらのオブジェクトは、スロットの機能に使用することができます。
#include <QWidget>
#include "childwin.h"
#include <QPushButton>
namespace Ui {
class Widget;
}
class Widget : public QWidget
{
Q_OBJECT
public:
explicit Widget(QWidget *parent = 0);
~Widget();
//创建按钮对象和子窗口对象
QPushButton *btn;
childWin *win;
//弹出/关闭子窗口的槽函数
void showChildWin();
private:
Ui::Widget *ui;
};
3、以下のコードwidget.cppファイル、基本的にコメントを持っている自分自身を追加し、私はいくつかのキーコード話すを選ぶでしょう。まず、初期化ボタンとサブウィンドウのオブジェクトが、設けられているボタンの初期のテキストは、[スタート];定義関数をスロット機能では、取得ボタンのテキストは[開く]その後、ポップサブウィンドウをクリックし、[閉じる]、ウィンドウを閉じます。最後に、接続シグナルとスロット、と私はラムダ式を使用しています。この時点で閉じるにクリックを達成するために、[スタート]ボタンのテキスト、あなたは、直接接続し、これらの関数を定義することができる場所this-> showChildWin();ですスロット関数呼び出し、信号の開始]ボタンをクリックし(「閉」)btn->のsetTextを使用して、関数を呼び出します。ボタンのテキストが変更されますので、もう一度クリックすると、子ウィンドウを閉じます!下に示すような結果を操作します:
#include "widget.h"
#include "ui_widget.h"
#include<QPushButton>
#pragma execution_character_set("utf-8"); //如果中文出现乱码加上这行!!!
Widget::Widget(QWidget *parent) :
QWidget(parent),
ui(new Ui::Widget)
{
ui->setupUi(this);
//定义主窗口大小
resize(380,300);
setWindowTitle("主窗口");
//创建一个子窗口对象
this->win = new childWin;
win->resize(350,200);
win->setWindowTitle("子窗口");
//创建一个按钮对象
this->btn = new QPushButton("打开",this);
btn->move(100,80);
//连接信号和槽,利用lambda表达式改变按钮上的文字
connect(btn,&QPushButton::clicked,this,[=](){
this->showChildWin();
btn->setText("关闭");
});
//connect(btn,&QPushButton::clicked,this,&Widget::showChildWin);
}
//定义弹出子窗口的槽函数
void Widget::showChildWin()
{
if(btn->text()=="打开")
win->show();
if(btn->text()=="关闭")
win->close();
}
Widget::~Widget()
{
delete ui;
}
4.注:接続での使用のラムダ式()ので、あなたすることはできませんbtn->のsetText(「クローズ」);後に、ためにシステムが基づいている。win-のスロット機能>ショー()へのフレーズシーケンシャルリードプログラムは、あなたがすぐに[閉じる]に設定し、すぐにwin->近い()が実行されます。結果は、子ウィンドウを開くには、クリックボタンで自動的に閉じ、むしろ近くにもう一度ボタンをクリックするよりも!ノートにこのポイント!サブウインドウを初期化する、またはその代わりに前の子ウィンドウのチャタリングを閉じる、ポップアップする新しい子ウィンドウを作成します。もう一度ボタンをクリックするスロット機能ではありません!