国产精品久久久aaaa,日日干夜夜操天天插,亚洲乱熟女香蕉一区二区三区少妇,99精品国产高清一区二区三区,国产成人精品一区二区色戒,久久久国产精品成人免费,亚洲精品毛片久久久久,99久久婷婷国产综合精品电影,国产一区二区三区任你鲁

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

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

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

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

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

掃碼添加小助手

加入工程師交流群

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

先來(lái)看下最終的效果,通過(guò)左側(cè)的兩個(gè)按鈕,實(shí)現(xiàn)兩個(gè)頁(yè)面的切換。

pYYBAGMZ9UWATgCbAACkkXYpMHA477.png

1 Qt堆棧窗口

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

1.1QStackedWidget

QStackedWidget 類(lèi)提供了多頁(yè)面切換的布局,一次只能顯示一個(gè)界面。

1.2 基礎(chǔ)模板

對(duì)于QStackedWidget的使用,可以先參考下面這個(gè)模板,配合QLabel來(lái)控制頁(yè)面的切換:

#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)變化時(shí),切換對(duì)應(yīng)的StackedWidget顯示
    connect(list, SIGNAL(currentRowChanged(int)), stack, SLOT(setCurrentIndex(int)));
}

該代碼的運(yùn)行效果如下:

poYBAGMZ9YSAfe_DAAANjE8O4O0194.png

本篇就在這個(gè)模板的基礎(chǔ)上,將Qt時(shí)鐘程序和Qt秒表程序移植過(guò)來(lái)。

2 移植時(shí)鐘與秒表程序

2.1 時(shí)鐘程序移植

將之前這篇中的程序作為一個(gè)獨(dú)立的窗口移植到本篇的程序中:嵌入式Qt-動(dòng)手編寫(xiě)并運(yùn)行自己的第1個(gè)ARM-Qt程序

移植步驟:

Qt Creator中,堆棧窗口基礎(chǔ)工程的基礎(chǔ)上,點(diǎn)文件菜單,再點(diǎn)新建文件或項(xiàng)目,新建一個(gè)C++類(lèi),名字可取clockwidget

pYYBAGMZ9ZCAQS_jAAA6p17FOZs671.png

將Qt時(shí)鐘的程序復(fù)制過(guò)來(lái),代碼基本不需要修改,只需要把類(lèi)名換成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); //設(shè)置最小尺寸
}

2.2 秒表程序移植

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

秒表這個(gè)Qt程序,用到了Qt Creator的圖形頁(yè)面設(shè)計(jì),因此要主要移植的不同之處。

移植步驟:

Qt Creator中,堆棧窗口基礎(chǔ)工程的基礎(chǔ)上,點(diǎn)文件菜單,再點(diǎn)新建文件或項(xiàng)目,新建一個(gè)C++類(lèi),名字可取TimerWidget

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

另外,可以將移植過(guò)來(lái)的ui文件,更名為T(mén)imerWidget.ui。需注意的是,修改了文件名后,還需要將ui文件以文本的形式打開(kāi),修改對(duì)應(yīng)的類(lèi)名為T(mén)imerWidget,要包含的頭文件也改名為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時(shí)鐘程序和Qt秒表程序后,就可以將這兩個(gè)功能加入到堆棧窗口中了。

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

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

    QPushButton *pClockButton = new QPushButton("時(shí)\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的信號(hào)和槽機(jī)制,需要信號(hào)和槽函數(shù)的參數(shù)一致或信號(hào)的參數(shù)多于槽的參數(shù),而按鈕按下沒(méi)有參數(shù),但切換堆棧頁(yè)面需要一個(gè)參數(shù)(索引號(hào),指示要展示第幾個(gè)頁(yè)面),因此不能直接使用pStack的setCurrentIndex作為槽函數(shù),需要自己再封裝一層,分別寫(xiě)兩個(gè)按鈕按下時(shí)的槽函數(shù)。

3 測(cè)試

將代碼在Windows上編譯運(yùn)行ok后,再將源碼復(fù)制到Ububtu中進(jìn)行交叉編譯,具體的編譯過(guò)程可參考之前的文章:嵌入式Qt-動(dòng)手編寫(xiě)并運(yùn)行自己的第1個(gè)ARM-Qt程序

然后將編譯后的程序復(fù)制到Linux板子中運(yùn)行,運(yùn)行效果如下:

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

poYBAGMZ9k2AG4n1AAwEBnPpxDQ594.png

可以看到Qt時(shí)鐘和Qt秒表這兩個(gè)頁(yè)面可以隨意切換,并且兩個(gè)頁(yè)面獨(dú)立運(yùn)行,某個(gè)頁(yè)面被隱藏顯示時(shí),其計(jì)時(shí)功能仍在運(yùn)行,再次將頁(yè)面切換回來(lái),計(jì)時(shí)時(shí)間也是對(duì)的。

4 總結(jié)

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

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

    關(guān)注

    5198

    文章

    20442

    瀏覽量

    333963
  • Qt
    Qt
    +關(guān)注

    關(guān)注

    2

    文章

    320

    瀏覽量

    40852
  • 秒表
    +關(guān)注

    關(guān)注

    3

    文章

    81

    瀏覽量

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

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    什么是嵌入式應(yīng)用開(kāi)發(fā)?

    、實(shí)現(xiàn)和部署,還包括硬件選擇、軟件設(shè)計(jì)、測(cè)試、集成和維護(hù)等流程?。 定義和背景 嵌入式應(yīng)用開(kāi)發(fā)是指將軟件部署到嵌入式系統(tǒng)中,這些系統(tǒng)廣泛應(yīng)用于消費(fèi)電子和工業(yè)自動(dòng)化中。嵌入式系統(tǒng)通常
    發(fā)表于 01-12 16:13

    arm嵌入式主板優(yōu)缺點(diǎn)

    嵌入式主板是嵌入在設(shè)備里面做控制、數(shù)據(jù)處理使用的CPU板 ,常見(jiàn)的有類(lèi),即基于X86的嵌入式主板和基于RISC的ARM 嵌入式主板。今天我
    發(fā)表于 01-08 07:08

    個(gè)面向單片機(jī)、事件驅(qū)動(dòng)的嵌入式開(kāi)發(fā)平臺(tái)介紹

    EventOS,是一個(gè)面向單片機(jī)、事件驅(qū)動(dòng)的嵌入式開(kāi)發(fā)平臺(tái)。它主要有大技術(shù)特色:一是事件驅(qū)動(dòng),二是超輕量。EventOS以及其母項(xiàng)目EventOS,目標(biāo)是開(kāi)發(fā)一個(gè)企業(yè)級(jí)的
    發(fā)表于 12-05 06:26

    分享一個(gè)嵌入式開(kāi)發(fā)學(xué)習(xí)路線

    如果你想要學(xué)習(xí)嵌入式開(kāi)發(fā),我建議按照這個(gè)學(xué)習(xí)路線準(zhǔn)備: 1. 基礎(chǔ)鋪墊期(1-2個(gè)月) 理解嵌入式系統(tǒng)的“硬件基礎(chǔ)”和“編程入門(mén)”,能看懂簡(jiǎn)單電路,寫(xiě)出基礎(chǔ)C語(yǔ)言代碼。這一階段的學(xué)習(xí)對(duì)學(xué)歷沒(méi)有
    發(fā)表于 12-04 11:01

    ProfiNet嵌入式板卡,主流替代可實(shí)現(xiàn)ProfiNet工業(yè)以太網(wǎng)的應(yīng)用實(shí)例

    ProfiNet嵌入式板卡,主流替代可實(shí)現(xiàn)ProfiNet工業(yè)以太網(wǎng)的應(yīng)用實(shí)例
    的頭像 發(fā)表于 12-01 17:11 ?1111次閱讀
    ProfiNet<b class='flag-5'>嵌入式</b>板卡,主流替代可<b class='flag-5'>實(shí)現(xiàn)</b>ProfiNet工業(yè)以太網(wǎng)的應(yīng)用實(shí)例

    嵌入式與FPGA的區(qū)別

    \"嵌入式開(kāi)發(fā)門(mén)檻低、就業(yè)廣,適合轉(zhuǎn)行;FPGA技術(shù)深、薪資高,但要求學(xué)歷和數(shù)學(xué)功底。選哪個(gè)?看你的基礎(chǔ)和職業(yè)目標(biāo)。\" ?我們先來(lái)明白下者區(qū)別在哪? ?1、嵌入式:分
    發(fā)表于 11-20 07:12

    嵌入式和FPGA的區(qū)別

    嵌入式系統(tǒng)與FPGA的核心差異:軟件定義功能VS硬件可重構(gòu)。嵌入式適合通用計(jì)算,開(kāi)發(fā)門(mén)檻低;FPGA憑借并行處理實(shí)現(xiàn)納秒級(jí)響應(yīng),但成本高、開(kāi)發(fā)難。二者融合的SoC器件正成為未來(lái)趨勢(shì),平衡性能與靈活性
    發(fā)表于 11-19 06:55

    單片機(jī)和嵌入式,到底是什么關(guān)系?

    很多人初次接觸嵌入式開(kāi)發(fā)時(shí),都會(huì)聽(tīng)到一句話:“嵌入式其實(shí)就是單片機(jī)?!笨僧?dāng)你真正開(kāi)始學(xué)習(xí)時(shí),會(huì)發(fā)現(xiàn)嵌入式和單片機(jī)雖然經(jīng)?!袄墶痹谝黄鹛?,但它們好像又不是一回事。這篇文章,我們就來(lái)厘清這兩個(gè)
    的頭像 發(fā)表于 11-14 10:28 ?1494次閱讀
    單片機(jī)和<b class='flag-5'>嵌入式</b>,到底是什么關(guān)系?

    恩智浦如何攻克嵌入式開(kāi)發(fā)難題

    在我們的身邊,嵌入式系統(tǒng)無(wú)處不在。而隨著技術(shù)的進(jìn)步和應(yīng)用的拓展,今天的嵌入式開(kāi)發(fā)也面臨著諸多新課題、新挑戰(zhàn)。
    的頭像 發(fā)表于 10-27 09:28 ?1772次閱讀

    嵌入式工程師為什么要學(xué)QT?

    Qt對(duì)嵌入式工程師來(lái)說(shuō),真的很重要嗎? Qt是一個(gè)跨平臺(tái)的C++應(yīng)用程序開(kāi)發(fā)框架,非常適合嵌入式系統(tǒng)的開(kāi)發(fā),
    發(fā)表于 08-14 15:15

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

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

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

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

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

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

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

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

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

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