目次
1.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();//隐藏第一个窗体
}
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;
}