女人自慰AV免费观看内涵网,日韩国产剧情在线观看网址,神马电影网特片网,最新一级电影欧美,在线观看亚洲欧美日韩,黄色视频在线播放免费观看,ABO涨奶期羡澄,第一导航fulione,美女主播操b

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(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 類提供了多頁(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)手編寫并運(yùn)行自己的第1個(gè)ARM-Qt程序

移植步驟:

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

pYYBAGMZ9ZCAQS_jAAA6p17FOZs671.png

將Qt時(shí)鐘的程序復(fù)制過(guò)來(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++類,名字可取TimerWidget

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

另外,可以將移植過(guò)來(lái)的ui文件,更名為TimerWidget.ui。需注意的是,修改了文件名后,還需要將ui文件以文本的形式打開(kāi),修改對(duì)應(yīng)的類名為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時(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ù),需要自己再封裝一層,分別寫兩個(gè)按鈕按下時(shí)的槽函數(shù)。

3 測(cè)試

將代碼在Windows上編譯運(yùn)行ok后,再將源碼復(fù)制到Ububtu中進(jìn)行交叉編譯,具體的編譯過(guò)程可參考之前的文章:嵌入式Qt-動(dòng)手編寫并運(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è)類,實(shí)現(xiàn)了Qt時(shí)鐘和Qt秒表這兩個(gè)頁(yè)面可以隨意切換。

審核編輯:湯梓紅
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(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)注

    5136

    文章

    19519

    瀏覽量

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

    關(guān)注

    1

    文章

    313

    瀏覽量

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

    關(guān)注

    3

    文章

    77

    瀏覽量

    22254
收藏 人收藏

    評(píng)論

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

    新手怎么學(xué)嵌入式?

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

    什么是嵌入式人工智能

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

    【「嵌入式系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)」閱讀體驗(yàn)】+ 學(xué)習(xí)一個(gè)STM32的案例

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

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

    感謝電子發(fā)燒友論壇和電子工業(yè)出版社的贈(zèng)書。 我自己從事嵌入式系統(tǒng)的教學(xué)工作,也指導(dǎo)過(guò)學(xué)生參加嵌入式相關(guān)的比賽并獲得過(guò)一些獎(jiǎng)項(xiàng)。《嵌入式系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)——第六屆全國(guó)大學(xué)生
    發(fā)表于 12-02 21:17

    什么是嵌入式?一文讀懂嵌入式主板

    在現(xiàn)代科技浪潮中,嵌入式技術(shù)已成為支撐各種智能設(shè)備和系統(tǒng)運(yùn)行的核心力量。那么,究竟什么是嵌入式嵌入式系統(tǒng),顧名思義,是將計(jì)算機(jī)的硬件和軟件嵌入到某種設(shè)備或系統(tǒng)中,以
    的頭像 發(fā)表于 10-16 10:14 ?2417次閱讀

    嵌入式系統(tǒng)的原理和應(yīng)用

    嵌入式系統(tǒng)是一種專用的計(jì)算機(jī)系統(tǒng),其設(shè)計(jì)初衷是執(zhí)行特定任務(wù),而非作為通用計(jì)算機(jī)使用。這類系統(tǒng)通常作為更大系統(tǒng)的一部分,起到控制、監(jiān)控或輔助的作用,具有資源受限、實(shí)時(shí)性高、可靠性強(qiáng)等特點(diǎn)。下面將從嵌入式系統(tǒng)的原理、應(yīng)用兩個(gè)方面進(jìn)行
    的頭像 發(fā)表于 10-05 17:03 ?1897次閱讀

    嵌入式主板是什么意思?嵌入式主板全面解析

    嵌入式主板,通常被稱為嵌入式系統(tǒng)的核心組件,是一種用于控制和數(shù)據(jù)處理的計(jì)算機(jī)硬件,其設(shè)計(jì)旨在嵌入特定設(shè)備中執(zhí)行專門任務(wù)。嵌入式主板如同是設(shè)備的“大腦”,主要功能是根據(jù)需要管理和控制設(shè)備
    的頭像 發(fā)表于 09-30 10:05 ?1458次閱讀

    嵌入式系統(tǒng)的未來(lái)趨勢(shì)有哪些?

    嵌入式系統(tǒng)是指將我們的操作系統(tǒng)和功能軟件集成于計(jì)算機(jī)硬件系統(tǒng)之中,形成一個(gè)專用的計(jì)算機(jī)系統(tǒng)。那么嵌入式系統(tǒng)的未來(lái)趨勢(shì)有哪些呢? 1. 人工智能與機(jī)器學(xué)習(xí)的整合 隨著現(xiàn)代人工智能(AI)和機(jī)器學(xué)習(xí)
    發(fā)表于 09-12 15:42

    嵌入式環(huán)形隊(duì)列與消息隊(duì)列的實(shí)現(xiàn)原理

    嵌入式環(huán)形隊(duì)列,也稱為環(huán)形緩沖區(qū)或循環(huán)隊(duì)列,是一種先進(jìn)先出(FIFO)的數(shù)據(jù)結(jié)構(gòu),用于在固定大小的存儲(chǔ)區(qū)域中高效地存儲(chǔ)和訪問(wèn)數(shù)據(jù)。其主要特點(diǎn)包括固定大小的數(shù)組和兩個(gè)指針(頭指針和尾指針),分別指向隊(duì)列的起始位置和結(jié)束位置。
    的頭像 發(fā)表于 09-02 15:29 ?1045次閱讀

    七大嵌入式GUI盤點(diǎn)

    。 MiniGUI 一款國(guó)產(chǎn)GUI,一款面向嵌入式系統(tǒng)的高級(jí)窗口系統(tǒng)和圖形用戶界面(GUI)支持系統(tǒng),由魏永明先生于1998年底開(kāi)始開(kāi)發(fā)。2002年,魏永明先生創(chuàng)建北京飛漫軟件技術(shù)有限公司,為MiniGUI
    發(fā)表于 09-02 10:58

    嵌入式linux開(kāi)發(fā)的基本步驟有哪些?

    嵌入式Linux開(kāi)發(fā)是一個(gè)復(fù)雜的過(guò)程,涉及到硬件選擇、操作系統(tǒng)移植、驅(qū)動(dòng)開(kāi)發(fā)、應(yīng)用程序開(kāi)發(fā)等多個(gè)方面。以下是嵌入式Linux開(kāi)發(fā)的基本步驟,以及每個(gè)步驟的說(shuō)明。 硬件選擇 在開(kāi)始嵌入式
    的頭像 發(fā)表于 09-02 09:11 ?1026次閱讀

    嵌入式QT常見(jiàn)開(kāi)發(fā)方式有哪些?

    提供的豐富組件如按鈕、文本框、窗口等構(gòu)建傳統(tǒng)的桌面應(yīng)用風(fēng)格界面。對(duì)于嵌入式設(shè)備上的復(fù)雜用戶界面或者需要高性能響應(yīng)的應(yīng)用,Qt Widgets是一個(gè)較為常用的選擇。 2.
    發(fā)表于 08-12 10:05

    嵌入式熱門領(lǐng)域有哪些?

    另一個(gè)備受關(guān)注的領(lǐng)域,已經(jīng)在汽車行業(yè)展現(xiàn)出革命性的影響。在自動(dòng)駕駛領(lǐng)域,嵌入式系統(tǒng)的重要性日益突出,它們被廣泛應(yīng)用于與傳感器和控制系統(tǒng)配合,實(shí)現(xiàn)車輛的自主運(yùn)行。自動(dòng)駕駛技術(shù)的急速發(fā)展為嵌入式
    發(fā)表于 07-16 09:23

    嵌入式系統(tǒng)怎么學(xué)?

    操作系統(tǒng)的基本概念和原理,掌握常見(jiàn)的RTOS,如FreeRTOS、uC/OS等,以實(shí)現(xiàn)對(duì)嵌入式系統(tǒng)的任務(wù)調(diào)度和資源管理。 6、通信協(xié)議:學(xué)習(xí)常用的通信協(xié)議,如UART、SPI、I2C、CAN等,以實(shí)現(xiàn)
    發(fā)表于 07-02 10:10

    PLC與嵌入式的區(qū)別是什么

    在工業(yè)自動(dòng)化和嵌入式系統(tǒng)領(lǐng)域,PLC(Programmable Logic Controller,可編程邏輯控制器)和嵌入式系統(tǒng)是兩個(gè)常被提及的概念。它們各自具有獨(dú)特的特點(diǎn)和應(yīng)用場(chǎng)景,但也常常被誤解
    的頭像 發(fā)表于 05-28 16:22 ?7977次閱讀