組み込み QT マルチインターフェイス スイッチング

目次

1. インターフェースクラスの実装を追加する

   1.1 2番目のインターフェースのクラスを追加する

1.2 2番目のインターフェースのヘッダーファイルとスロット関数を追加 

2. プロジェクト管理の実施


Qt では、マルチインターフェイスのスイッチングとは、アプリケーション内で複数の異なるインターフェイスを使用し、それらの間で切り替えることを指します。この切り替えは、ボタンのクリックやメニュー項目の選択などのユーザーによってトリガーすることも、特定の条件に基づいて異なるインターフェイスを自動的に表示するなど、アプリケーションによって自動的にトリガーすることもできます。

  Qt は、複数のインターフェイスを格納するために使用できるコンテナ コンポーネントである QStackedWidget クラスを提供しており、各インターフェイスは QWidget またはそのサブクラスです。QStackedWidget に複数のインターフェースを追加することで、必要なときに特定のインターフェースを表示できるようになり、インターフェース切り替えの効果が得られます。

  インターフェイスの切り替えプロセス中に、Qt によって提供されるさまざまなシグナルおよびスロット メカニズムを使用して、ユーザー入力およびアプリケーション ロジックを処理できます。ボタンのクリック信号またはメニュー項目の選択信号を対応するスロット機能に接続することで、ユーザーがイベントをトリガーしたときに、対応するインターフェイスの切り替え操作を実行できます。

  つまり、Qt マルチインターフェース切り替えとは、Qt アプリケーション内で複数のインターフェースを使用し、ユーザーの操作やアプリケーションロジックによって異なるインターフェースを表示するように切り替えることを指します。

1.  インターフェースクラスの実装を追加する

   1.1  2番目のインターフェースのクラスを追加する

1.2 2番目のインターフェースのヘッダーファイルとスロット関数を追加 

#include "twoform.h"
void ontForm::on_gotoTwoBtn_clicked()
{
 //创建第 2 个界面
 //方式一:每点击一次都创建一个第 2 界面
 //twoForm *twoform = new twoForm ;
 // twoform->show();
 //方式二:多次点击也只创建一个第 2 界面--全局变量指针
 //twoform = new twoForm ; //放在构造函数,放在此也会创建多个
 twoform->show();//twoform 全局变量指针
 //方式三:多次点击也只创建一个第 2 界面--全局变量
//tf.show();
this->hide();//隐藏第一个窗体
}
2 ページ目から最初のページに戻ります。 最初のフォームは手順 2
フォーム 2 は信号を定義します。
class twoForm : public QWidget
{
 Q_OBJECT
public:
 explicit twoForm(QWidget *parent = 0);
 ~twoForm();
signals:
void twoFormSendSignal(QString);//定义一个信号
}

ウィンドウ 2 は信号を送信します。

void twoForm::doProcessTwoFormBtnToOneForm(bool)
{
 clinckCount++;
 //发送信号,通知第一个窗体
emit twoFormSendSignal(QString::number(clinckCount));
this->hide();
}

フォーム 1 はシグナルを受信します。

//在第一个窗体的构造函数中添加绑定
twoform = new twoForm ;
connect(twoform,SIGNAL(twoFormSendSignal(QString)),this,SLOT(doProcessTwoForm
Resquest(QString)));
void ontForm::doProcessTwoFormResquest(QString str)
{
qDebug() << str <<endl;
this->show();
}

2. プロジェクト管理の実施

実装機能:

クリックして戻ります。

 

ポップアップ インターフェイスのプロパティ設定:

プログラム例:

ウィジェット.cpp

#include "widget.h"
#include "ui_widget.h"
#include <QPalette>
Widget::Widget(QWidget *parent) :
 QWidget(parent),
 ui(new Ui::Widget)
{
 ui->setupUi(this);
}
Widget::~Widget()
{
 delete ui;
}
void Widget::resizeEvent(QResizeEvent *event)
{
 setBackgroundImage(":/image/backgroup.jpg");
}
void Widget::setBackgroundImage(QString Image)
{
 //Qpixmap 是图片类,scaled 是缩放成为本窗口的大小
 QPixmap pixmap = QPixmap(Image).scaled(this->size());
 //QPalette 是调色板,palette 是指向背景的调色板
 QPalette palette(this->palette());
 //brush 是设置画刷,画刷上的颜色来自 Image
 palette.setBrush(QPalette::Background,QBrush(pixmap));
 //刷到背景上
 this->setPalette(palette);
}
void Widget::on_ledBtn_clicked()
{
 UiHwControl *uiHwControl = new UiHwControl();//注意,这里不能加 this
 int x,y,w,h;
 QRect rect = this->geometry(); //获取当前坐标和尺寸信息
 x=rect.x();
 y=rect.y()+ui->staWidget->height();
 w=rect.width();
 h=rect.height()-ui->staWidget->height();
 uiHwControl->setGeometry(x,y,w,h);
 uiHwControl->show();
 connect(ui->backBtn,SIGNAL(clicked()),uiHwControl,SLOT(deleteLater()));
}

 uihwcontrol.cpp

#include "uihwcontrol.h"
#include "ui_uihwcontrol.h"
UiHwControl::UiHwControl(QWidget *parent) :
 QWidget(parent),
 ui(new Ui::UiHwControl)
{
 ui->setupUi(this);
 this->setWindowFlag(Qt::FramelessWindowHint); //不显示标题栏
}
UiHwControl::~UiHwControl()
{
 delete ui;
}

おすすめ

転載: blog.csdn.net/Lushengshi/article/details/130819156