18video性欧美19sex,欧美高清videosddfsexhd,性少妇videosexfreexxx片中国,激情五月激情综合五月看花,亚洲人成网77777色在线播放

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內(nèi)不再提示

嵌入式Qt-實現(xiàn)兩個窗口的切換

碼農(nóng)愛學習 ? 來源:碼農(nóng)愛學習 ? 作者:碼農(nóng)愛學習 ? 2022-09-09 09:03 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

之前的文章,分別有介紹過使用Qt程序?qū)崿F(xiàn)一個時鐘和一個秒表,本篇,來將這兩個功能整合在一起,實現(xiàn)兩個頁面的隨意切換,并且兩個頁面能獨立運行,互不影響。

先來看下最終的效果,通過左側(cè)的兩個按鈕,實現(xiàn)兩個頁面的切換。

pYYBAGMZ9UWATgCbAACkkXYpMHA477.png

1 Qt堆棧窗口

本篇的頁面切換功能,是利用Qt的QStackedWidget實現(xiàn)的。

1.1QStackedWidget

QStackedWidget 類提供了多頁面切換的布局,一次只能顯示一個界面。

1.2 基礎模板

對于QStackedWidget的使用,可以先參考下面這個模板,配合QLabel來控制頁面的切換:

#include "stackdlg.h"
#include 

StackDlg::StackDlg(QWidget *parent)
    : QDialog(parent)
{
    setWindowTitle(tr("StackedWidget"));

    list = new QListWidget(this); //創(chuàng)建ListWidge
    list->insertItem(0, tr("Window1")); //ListWidge中添加Item
    list->insertItem(1, tr("Window2")); //ListWidge中添加Item
    list->insertItem(2, tr("Window3")); //ListWidge中添加Item

    stack = new QStackedWidget(this); //創(chuàng)建StackedWidget
    label1 = new QLabel(tr("WindowTest1"));
    label2 = new QLabel(tr("WindowTest2"));
    label3 = new QLabel(tr("WindowTest3"));
    stack->addWidget(label1); //StackedWidget中添加窗口1
    stack->addWidget(label2); //StackedWidget中添加窗口2
    stack->addWidget(label3); //StackedWidget中添加窗口3

    QHBoxLayout *mainLayout = new QHBoxLayout(this); //創(chuàng)建豎直布局器
    mainLayout->setMargin(5);
    mainLayout->setSpacing(5);
    mainLayout->addWidget(list);                      //放入ListWidge
    mainLayout->addWidget(stack,0, Qt::AlignHCenter); //放入StackedWidget
    mainLayout->setStretchFactor(list, 1);  //ListWidge的伸縮尺度是1
    mainLayout->setStretchFactor(stack, 3); //StackedWidget的伸縮尺度是3

    // ListWidge的行狀態(tài)變化時,切換對應的StackedWidget顯示
    connect(list, SIGNAL(currentRowChanged(int)), stack, SLOT(setCurrentIndex(int)));
}

該代碼的運行效果如下:

poYBAGMZ9YSAfe_DAAANjE8O4O0194.png

本篇就在這個模板的基礎上,將Qt時鐘程序和Qt秒表程序移植過來。

2 移植時鐘與秒表程序

2.1 時鐘程序移植

將之前這篇中的程序作為一個獨立的窗口移植到本篇的程序中:嵌入式Qt-動手編寫并運行自己的第1個ARM-Qt程序

移植步驟:

Qt Creator中,堆棧窗口基礎工程的基礎上,點文件菜單,再點新建文件或項目,新建一個C++類,名字可取clockwidget

pYYBAGMZ9ZCAQS_jAAA6p17FOZs671.png

將Qt時鐘的程序復制過來,代碼基本不需要修改,只需要把類名換成ClockWidget即可

例如其構(gòu)造函數(shù)如下:

ClockWidget::ClockWidget(QWidget *parent) : QWidget(parent)
{
    QTimer *timer = new QTimer(this);
    connect(timer, SIGNAL(timeout()), this, SLOT(update()));
    timer->start(1000);

    setWindowTitle(tr("Clock"));
    setMinimumSize(200, 200); //設置最小尺寸
}

2.2 秒表程序移植

將之前這篇中的程序作為一個獨立的窗口移植到本篇的程序中:嵌入式Qt-做一個秒表

秒表這個Qt程序,用到了Qt Creator的圖形頁面設計,因此要主要移植的不同之處。

移植步驟:

Qt Creator中,堆棧窗口基礎工程的基礎上,點文件菜單,再點新建文件或項目,新建一個C++類,名字可取TimerWidget

將ui文件也拷貝過來,在工程中,通過添加現(xiàn)有文件的方式,將ui文件添加進工程

另外,可以將移植過來的ui文件,更名為TimerWidget.ui。需注意的是,修改了文件名后,還需要將ui文件以文本的形式打開,修改對應的類名為TimerWidget,要包含的頭文件也改名為ui_TimerWidget.h

pYYBAGMZ9ZmAGs21AADp1aIedfk134.png

移植后的構(gòu)造函數(shù)如下:

#include "timerwidget.h"
#include "ui_TimerWidget.h"
#include
#pragma execution_character_set("utf-8")

TimerWidget::TimerWidget(QWidget *parent) : QWidget(parent), ui(new Ui::TimerWidget)
{
    ui->setupUi(this);
    connect(&timer, SIGNAL(timeout()), this, SLOT(timeout_slot()));
    connect(&timer, SIGNAL(timeout()), this, SLOT(update()));
    connect(ui->Btn_Reset, SIGNAL(clicked()), this, SLOT(update()));

    time.setHMS(0,0,0,0);
    ui->Txt_ShowTime->setText("00:00:00");

    ui->Btn_Start->setChecked(false);
    ui->Btn_Reset->setEnabled(false);
    ui->Btn_Hit->setEnabled(false);
}

?

注意頭文件包含的是ui_TimerWidget.h,構(gòu)造函數(shù)繼承的ui也是Ui::TimerWidget

2.3 主程序框架

移植好Qt時鐘程序和Qt秒表程序后,就可以將這兩個功能加入到堆棧窗口中了。

注意,下面的頁面切換,我改用兩個QPushButton來實現(xiàn)Qt時鐘和Qt秒表的頁面切換,并使用QGridLayout進行布局,使得兩個按鈕位于整個界面的左側(cè)。

StackDlg::StackDlg(QWidget *parent)
    : QDialog(parent)
{
    setWindowTitle(tr("StackedWidget"));
    setMinimumSize(800, 480);
    qDebug("Hello");

    QPushButton *pClockButton = new QPushButton("時\n鐘", this);
    QPushButton *pTimerButton = new QPushButton("秒\n表", this);
    pClockButton->setFixedSize(QSize(80,200));
    pClockButton->setFont(QFont("Times", 20));
    pTimerButton->setFixedSize(QSize(80,200));
    pTimerButton->setFont(QFont("Times", 20));

    pStack = new QStackedWidget(this);
    ClockWidget *pClockWidget = new ClockWidget();
    TimerWidget *pTimerWidget = new TimerWidget();
    pStack->addWidget(pClockWidget);
    pStack->addWidget(pTimerWidget);

    QGridLayout *mainLayout = new QGridLayout(this);
    mainLayout->addWidget(pClockButton, 0, 0, Qt::AlignCenter);
    mainLayout->addWidget(pTimerButton, 1, 0, Qt::AlignCenter);
    mainLayout->addWidget(pStack, 0, 1, 2, 1);

    mainLayout->setContentsMargins(10,10,1,1);
    mainLayout->setColumnStretch(1, 10);
    mainLayout->setRowStretch(1, 1);

    connect(pClockButton, SIGNAL(clicked()), this, SLOT(showClock()));
    connect(pTimerButton, SIGNAL(clicked()), this, SLOT(showTimer()));
}

void StackDlg::showClock()
{
    qDebug("%s", __func__);
    pStack->setCurrentIndex(0);
}
void StackDlg::showTimer()
{
    qDebug("%s", __func__);
    pStack->setCurrentIndex(1);
}

另外需要注意的是,Qt的信號和槽機制,需要信號和槽函數(shù)的參數(shù)一致或信號的參數(shù)多于槽的參數(shù),而按鈕按下沒有參數(shù),但切換堆棧頁面需要一個參數(shù)(索引號,指示要展示第幾個頁面),因此不能直接使用pStack的setCurrentIndex作為槽函數(shù),需要自己再封裝一層,分別寫兩個按鈕按下時的槽函數(shù)。

3 測試

將代碼在Windows上編譯運行ok后,再將源碼復制到Ububtu中進行交叉編譯,具體的編譯過程可參考之前的文章:嵌入式Qt-動手編寫并運行自己的第1個ARM-Qt程序

然后將編譯后的程序復制到Linux板子中運行,運行效果如下:

https://www.bilibili.com/video/BV1RB4y147s7

poYBAGMZ9k2AG4n1AAwEBnPpxDQ594.png

可以看到Qt時鐘和Qt秒表這兩個頁面可以隨意切換,并且兩個頁面獨立運行,某個頁面被隱藏顯示時,其計時功能仍在運行,再次將頁面切換回來,計時時間也是對的。

4 總結(jié)

本篇介紹了介紹了QStackedWidget的使用,通過這個類,實現(xiàn)了Qt時鐘和Qt秒表這兩個頁面可以隨意切換。

審核編輯:湯梓紅
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 嵌入式
    +關注

    關注

    5177

    文章

    20003

    瀏覽量

    325486
  • Qt
    Qt
    +關注

    關注

    2

    文章

    317

    瀏覽量

    40016
  • 秒表
    +關注

    關注

    3

    文章

    81

    瀏覽量

    22530
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    嵌入式工程師為什么要學QT?

    Qt嵌入式工程師來說,真的很重要嗎? Qt是一跨平臺的C++應用程序開發(fā)框架,非常適合嵌入式系統(tǒng)的開發(fā),
    發(fā)表于 08-14 15:15

    嵌入式軟件開發(fā)常用的軟件有哪些?

    軟件功能。 2. Visual Studio 簡稱VS: 它是一IDE,集成開發(fā)環(huán)境。驗證C程序或是進行c#程序開發(fā),可以用它。一些與嵌入式相關的模擬器也是基于VS的。幫助開發(fā)人員更穩(wěn)定,更有
    發(fā)表于 07-03 17:06

    怎么結(jié)合嵌入式,Linux,和FPGA三方向達到一均衡發(fā)展?

    嵌入式領域,不少人都懷揣著讓嵌入式、Linux 和 FPGA 三方向實現(xiàn)均衡發(fā)展的夢想,然而實踐中卻面臨諸多挑戰(zhàn)。就像備受矚目的全棧工程師稚暉君,他從大學玩單片機起步,憑借將智能算
    的頭像 發(fā)表于 06-25 10:08 ?549次閱讀
    怎么結(jié)合<b class='flag-5'>嵌入式</b>,Linux,和FPGA三<b class='flag-5'>個</b>方向達到一<b class='flag-5'>個</b>均衡發(fā)展?

    Linux嵌入式和單片機嵌入式的區(qū)別?

    Processor Unit)。 2. 單片機嵌入式(也稱為嵌入式微控制器MCU): 定義:一種集成電路,能夠在一芯片上完成各種計算、控制和管理任務。 特點:小型化、低功耗、成本低、可靠性高
    發(fā)表于 06-20 09:46

    運行在嵌入式系統(tǒng)上的emApps

    在當今快節(jié)奏的嵌入式系統(tǒng)世界中,靈活性和適應性是嵌入式系統(tǒng)實現(xiàn)的關鍵。SEGGER推出了其最新創(chuàng)新:Embedded apps(emApps)應用,類似于手機上的應用程序,可以運行在嵌入式
    的頭像 發(fā)表于 06-18 09:53 ?515次閱讀
    運行在<b class='flag-5'>嵌入式</b>系統(tǒng)上的emApps

    飛凌嵌入式「2025嵌入式及邊緣AI技術論壇」議程公布

    4月22日,飛凌嵌入式“2025嵌入式及邊緣AI技術論壇”將在深圳舉行,論壇以“新生態(tài),智未來”為主題,旨在匯聚行業(yè)智慧,探討嵌入式技術與邊緣AI的深度融合與創(chuàng)新應用。
    的頭像 發(fā)表于 04-02 15:12 ?925次閱讀
    飛凌<b class='flag-5'>嵌入式</b>「2025<b class='flag-5'>嵌入式</b>及邊緣AI技術論壇」議程公布

    嵌入式教育科普|GPIO接口全面解析

    在現(xiàn)代科技領域,嵌入式系統(tǒng)接口作為信息交互的核心載體,發(fā)揮著至關重要的作用,各類接口通過預定義的通信協(xié)議與標準化規(guī)范,可以實現(xiàn)設備間的精準數(shù)據(jù)傳輸與智能控制。 作為嵌入式開發(fā)的技術基礎,接口
    的頭像 發(fā)表于 03-05 11:11 ?2424次閱讀
    <b class='flag-5'>嵌入式</b>教育科普|GPIO接口全面解析

    嵌入式主板的概述與發(fā)展

    隨著科技的迅猛發(fā)展,嵌入式系統(tǒng)在現(xiàn)代電子產(chǎn)品中扮演著越來越重要的角色。嵌入式主板作為嵌入式系統(tǒng)的核心組件之一,承擔著控制、處理和通訊等多種功能。本文將對嵌入式主板的基本概念、構(gòu)成部分、
    的頭像 發(fā)表于 01-13 16:30 ?1021次閱讀
    <b class='flag-5'>嵌入式</b>主板的概述與發(fā)展

    嵌入式條碼掃描器哪家好?嵌入式掃碼器需不需要用串口方式連接?

    連接呢?讓我們一同探討這兩個問題。嵌入式條碼掃描器哪家好?首先,選擇嵌入式條碼掃描器時,品牌信譽與技術實力是首要考慮的因素。市場上,新大陸、遠景達、霍尼韋爾等品牌
    的頭像 發(fā)表于 01-10 00:00 ?539次閱讀
    <b class='flag-5'>嵌入式</b>條碼掃描器哪家好?<b class='flag-5'>嵌入式</b>掃碼器需不需要用串口方式連接?

    新手怎么學嵌入式?

    ,實現(xiàn)一些簡單的功能,如點亮一 LED 燈、讀取傳感器數(shù)據(jù)等,來加深對嵌入式技術的理解。你還可以參加一些線上或線下的嵌入式項目實踐活動,與其他愛好者一起學習和交流。 5. 學習
    發(fā)表于 12-12 10:51

    什么是嵌入式人工智能

    嵌入式人工智能的目標是使嵌入式系統(tǒng)具備智能化的感知、分析和響應能力,從而實現(xiàn)自主決策、自適應學習和智能交互等功能,以提高系統(tǒng)的性能、效率和用戶體驗.
    的頭像 發(fā)表于 12-11 09:23 ?1345次閱讀
    什么是<b class='flag-5'>嵌入式</b>人工智能

    【「嵌入式系統(tǒng)設計與實現(xiàn)」閱讀體驗】+ 學習一STM32的案例

    嵌入式系統(tǒng)設計與實現(xiàn)——第六屆全國大學生嵌入式芯片與系統(tǒng)設計競賽芯片應用賽道優(yōu)秀作品剖析》一書的基本情況。今天來學習一具體的案例。 這本書中意法半導體的案例是最多的,尤其是第二部分
    發(fā)表于 12-06 22:22

    【「嵌入式系統(tǒng)設計與實現(xiàn)」閱讀體驗】+ 初步印象

    感謝電子發(fā)燒友論壇和電子工業(yè)出版社的贈書。 我自己從事嵌入式系統(tǒng)的教學工作,也指導過學生參加嵌入式相關的比賽并獲得過一些獎項?!?b class='flag-5'>嵌入式系統(tǒng)設計與實現(xiàn)——第六屆全國大學生
    發(fā)表于 12-02 21:17

    【「嵌入式系統(tǒng)設計與實現(xiàn)」閱讀體驗】全書概覽與內(nèi)容簡介

    嵌入式系統(tǒng)設計與實現(xiàn)》,瞬間就被吸引了。非常感謝電子發(fā)燒友平臺提供這次寶貴機會,讓我有機會接觸到這么多優(yōu)秀的設計案例。 今天剛收到書籍,接下來讓我們一起先大概瀏覽一下這本書的內(nèi)容吧! 內(nèi)容簡介 本書
    發(fā)表于 12-01 17:05

    嵌入式系統(tǒng)與物聯(lián)網(wǎng)的結(jié)合

    隨著科技的飛速發(fā)展,嵌入式系統(tǒng)和物聯(lián)網(wǎng)(IoT)已經(jīng)成為現(xiàn)代技術領域的重要組成部分。嵌入式系統(tǒng)是指嵌入到設備或系統(tǒng)中的專用計算機系統(tǒng),而物聯(lián)網(wǎng)則是指通過互聯(lián)網(wǎng)將各種設備連接起來,實現(xiàn)
    的頭像 發(fā)表于 11-06 10:23 ?1526次閱讀