国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

04-6_Qt 5.9 C++開發(fā)指南_QListWidget和QToolButton

這篇具有很好參考價值的文章主要介紹了04-6_Qt 5.9 C++開發(fā)指南_QListWidget和QToolButton。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

1. 實例簡介

Qt 中用于項 (Item)處理的組件有兩類,一類是 Item Views,包括 QListView、QTreeView、QTableView、QColumnView 等;另一類是 Item Widgets,包括 QListWidget、QTreeWidget 和QTableWidget。
Item Views 基于模型/視圖(Model/Vicw)結構,視圖 (View)與模型數(shù)據(jù)(Model Data)關聯(lián)實現(xiàn)數(shù)據(jù)的顯示和編輯,模型/視圖結構的使用在第5 章詳細介紹。
Item Widgets 是直接將數(shù)據(jù)存儲在每一個項里,例如,QListWidget 的每一行是一個項,QTreeWidget 的每個節(jié)點是一個項,QTableWidget 的每一個單元格是一個項。一個項存儲了文字文字的格式、自定義數(shù)據(jù)等。
Item Widgets 是GUI 設計中常用的組件,本節(jié)通過實例 samp4_7 先介紹 QListWidget 以及其他一些組件的用法,實例運行時界面如圖 4-8 所示。

04-6_Qt 5.9 C++開發(fā)指南_QListWidget和QToolButton,# Qt 5.9 C++開發(fā)指南,qt,c++,開發(fā)語言

本實例不僅介紹QListWidget 的使用,還包括如下一些功能的實現(xiàn)。

  • 使用QTabWidget 設計多頁界面,工作區(qū)右側就是一個具有 3 個頁面的 TabWidget 組件。
  • 使用QToolBox 設計多組工具箱,工作區(qū)左側是一個有 3 個組的 TolBox 組件。
  • 使用分隔條(QSplitter) 設計可以左右分割的界面,工作區(qū)的 TolBox 和 TabWidget 之間有一個 splitter,運行時可以分割調(diào)整兩個組件的大小。
  • 創(chuàng)建Actions,用Actions 設計主工具欄,用Action 關聯(lián) QToolButton 按鈕。
  • 使用 QToolButton 按鈕,設置與 Action 關聯(lián),設計具有下拉菜單功能的 ToolButton 按鈕在主工具欄上添加具有下拉菜單的 ToolButton 按鈕。
  • 使用 QListWidget,演示如何創(chuàng)建和添加項,為項設置圖標和復選框,如何遍歷列表進行選擇。
  • QListWidget的主要信號currentItemChanged()的功能,編寫響應槽函數(shù)。
  • 為QListWidget 組件利用已設計的 Actions 創(chuàng)建自定義快捷菜單。

關于上述提到詳細的請參考源碼及書籍

2. 源碼

2.1 混合式界面設計

04-6_Qt 5.9 C++開發(fā)指南_QListWidget和QToolButton,# Qt 5.9 C++開發(fā)指南,qt,c++,開發(fā)語言文章來源地址http://www.zghlxwxcb.cn/news/detail-639031.html

2.2 mainwindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include    <QMainWindow>
#include    <QListWidgetItem>

namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT

private:
    void    setActionsForButton();
    void    createSelectionPopMenu();
public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();

private slots:
    void on_actListClear_triggered();  //清除項

    void on_actListIni_triggered(); //項初始化

    void on_chkBoxListEditable_clicked(bool checked);   //chkBoxListEditable單擊事件

//當前選擇項發(fā)生變化
    void on_listWidget_currentItemChanged(QListWidgetItem *current, QListWidgetItem *previous);

    void on_actListInsert_triggered();  //插入項

    void on_actListAppend_triggered();  //添加項

    void on_actListDelete_triggered();  //刪除當前項

    void on_listWidget_customContextMenuRequested(const QPoint &pos);   //彈出菜單

    void on_toolBox_currentChanged(int index); //ToolBox當前組變化時,顯示TabWidget相應的頁面

    void on_actSelALL_triggered(); //全選

    void on_actSelNone_triggered();//全不選

    void on_actSelInvs_triggered();//反選

private:
    Ui::MainWindow *ui;
};

#endif // MAINWINDOW_H

2.3 mainwindow.cpp

#include    "mainwindow.h"
#include    "ui_mainwindow.h"
#include    <QMenu>


void MainWindow::setActionsForButton()
{//為QToolButton按鈕設置Action
    ui->tBtnListIni->setDefaultAction(ui->actListIni);
    ui->tBtnListClear->setDefaultAction(ui->actListClear);
    ui->tBtnListInsert->setDefaultAction(ui->actListInsert);
    ui->tBtnListAppend->setDefaultAction(ui->actListAppend);
    ui->tBtnListDelete->setDefaultAction(ui->actListDelete);

    ui->tBtnSelALL->setDefaultAction(ui->actSelALL);
    ui->tBtnSelNone->setDefaultAction(ui->actSelNone);
    ui->tBtnSelInvs->setDefaultAction(ui->actSelInvs);
}

void MainWindow::createSelectionPopMenu()
{
//創(chuàng)建下拉菜單
    QMenu* menuSelection=new QMenu(this); //創(chuàng)建選擇彈出式菜單
    menuSelection->addAction(ui->actSelALL);
    menuSelection->addAction(ui->actSelNone);
    menuSelection->addAction(ui->actSelInvs);

//listWidget上方的tBtnSelectItem按鈕
    ui->tBtnSelectItem->setPopupMode(QToolButton::MenuButtonPopup);//菜單彈出模式,執(zhí)行按鈕的Action
    ui->tBtnSelectItem->setToolButtonStyle(Qt::ToolButtonTextBesideIcon); //按鈕樣式
    ui->tBtnSelectItem->setDefaultAction(ui->actSelPopMenu);//關聯(lián)Action
    ui->tBtnSelectItem->setMenu(menuSelection); //設置下拉菜單

//工具欄上的 下拉式菜單按鈕
    QToolButton  *aBtn=new QToolButton(this);
    aBtn->setPopupMode(QToolButton::InstantPopup);//button's own action is not triggered.
    aBtn->setToolButtonStyle(Qt::ToolButtonTextUnderIcon);//按鈕樣式
    aBtn->setDefaultAction(ui->actSelPopMenu); //設置Action,獲取圖標、標題等設置
    aBtn->setMenu(menuSelection);//設置下拉菜單
    ui->mainToolBar->addWidget(aBtn); //工具欄添加按鈕

//工具欄添加分隔條,和“退出”按鈕
    ui->mainToolBar->addSeparator();
    ui->mainToolBar->addAction(ui->actQuit);
}

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    setCentralWidget(ui->splitter); //設置中心組件
    setActionsForButton();
    createSelectionPopMenu();
}

MainWindow::~MainWindow()
{
    delete ui;
}

void MainWindow::on_actListClear_triggered()
{
    ui->listWidget->clear(); //清除項
}

void MainWindow::on_actListIni_triggered()
{ //初始化項
    QListWidgetItem *aItem; //每一行是一個QListWidgetItem

    QIcon aIcon;
    aIcon.addFile(":/images/icons/check2.ico"); //設置ICON的圖標
    bool chk=ui->chkBoxListEditable->isChecked();//是否可編輯

    ui->listWidget->clear(); //清除項
    for (int i=0; i<10; i++)
    {
        QString str=QString::asprintf("Item %d",i);
        aItem=new QListWidgetItem(); //新建一個項

        aItem->setText(str); //設置文字標簽
        aItem->setIcon(aIcon);//設置圖標
        aItem->setCheckState(Qt::Checked); //設置為選中狀態(tài)
        if (chk) //可編輯, 設置flags
            aItem->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEditable |Qt::ItemIsUserCheckable |Qt::ItemIsEnabled);
        else//不可編輯, 設置flags
            aItem->setFlags(Qt::ItemIsSelectable |Qt::ItemIsUserCheckable |Qt::ItemIsEnabled);
        ui->listWidget->addItem(aItem); //增加一個項
    }
}

void MainWindow::on_chkBoxListEditable_clicked(bool checked)
{ //可編輯 QCheckBox的響應代碼, 設置所有項是否可編輯
    int i,cnt;
    QListWidgetItem *aItem;

    cnt=ui->listWidget->count();//項的個數(shù)
    for (i=0; i<cnt; i++)
    {
        aItem=ui->listWidget->item(i);//獲得一個項
        if (checked) //可編輯
            aItem->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEditable |Qt::ItemIsUserCheckable |Qt::ItemIsEnabled);
        else
            aItem->setFlags(Qt::ItemIsSelectable |Qt::ItemIsUserCheckable |Qt::ItemIsEnabled);
    }

}

void MainWindow::on_listWidget_currentItemChanged(QListWidgetItem *current, QListWidgetItem *previous)
{ //listWidget當前選中項發(fā)生變化
  QString str;
  if (current != NULL) //需要檢測變量指針是否為空
  {
    if (previous==NULL)  //需要檢測變量指針是否為空
      str="當前:"+current->text();
    else
      str="前一項:"+previous->text()+"; 當前項:"+current->text();
    ui->editCutItemText->setText(str);
  }
}

void MainWindow::on_actListInsert_triggered()
{   //插入一個項
    QIcon aIcon;
    aIcon.addFile(":/images/icons/check2.ico"); //圖標

    bool chk=ui->chkBoxListEditable->isChecked(); //是否可比那幾

    QListWidgetItem* aItem=new QListWidgetItem("New Inserted Item"); //創(chuàng)建一個項
    aItem->setIcon(aIcon);//設置圖標
    aItem->setCheckState(Qt::Checked); //設置為checked
    if (chk) //設置標記
        aItem->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEditable |Qt::ItemIsUserCheckable |Qt::ItemIsEnabled);
    else
        aItem->setFlags(Qt::ItemIsSelectable |Qt::ItemIsUserCheckable |Qt::ItemIsEnabled);

    ui->listWidget->insertItem(ui->listWidget->currentRow(),aItem); //在當前行的上方插入一個項

}

void MainWindow::on_actListAppend_triggered()
{//增加一個項
    QIcon aIcon;
    aIcon.addFile(":/images/icons/check2.ico"); //設定圖標

    bool chk=ui->chkBoxListEditable->isChecked();//是否可編輯

    QListWidgetItem* aItem=new QListWidgetItem("New Added Item"); //創(chuàng)建一個Item
    aItem->setIcon(aIcon); //設置圖標
    aItem->setCheckState(Qt::Checked); //設置為checked
    if (chk) //設置標志
        aItem->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEditable |Qt::ItemIsUserCheckable |Qt::ItemIsEnabled);
    else
        aItem->setFlags(Qt::ItemIsSelectable |Qt::ItemIsUserCheckable |Qt::ItemIsEnabled);

    ui->listWidget->addItem(aItem);//增加一個項

}

void MainWindow::on_actListDelete_triggered()
{ //刪除當前項
    int row=ui->listWidget->currentRow();//當前行

    QListWidgetItem* aItem=ui->listWidget->takeItem(row); //移除指定行的項,但不delete
    delete aItem; //需要手工刪除對象

//    QListWidgetItem *QListWidget::takeItem(int row)
//    Removes and returns the item from the given row in
//            the list widget; otherwise returns 0.
//    Items removed from a list widget will not be managed by Qt,
//            and will need to be deleted manually.
}

void MainWindow::on_listWidget_customContextMenuRequested(const QPoint &pos)
{
    Q_UNUSED(pos);
    QMenu* menuList=new QMenu(this); //創(chuàng)建菜單

  //添加Actions創(chuàng)建菜單項
    menuList->addAction(ui->actListIni);
    menuList->addAction(ui->actListClear);
    menuList->addAction(ui->actListInsert);
    menuList->addAction(ui->actListAppend);
    menuList->addAction(ui->actListDelete);
    menuList->addSeparator();
    menuList->addAction(ui->actSelALL);
    menuList->addAction(ui->actSelNone);
    menuList->addAction(ui->actSelInvs);

    menuList->exec(QCursor::pos()); //在鼠標光標位置顯示右鍵快捷菜單

    delete menuList; //手工創(chuàng)建的指針必須手工刪除
}

void MainWindow::on_toolBox_currentChanged(int index)
{
    ui->tabWidget->setCurrentIndex(index);//ToolBox當前頁與tabWidget的當前頁聯(lián)動
}


void MainWindow::on_actSelALL_triggered()
{ //項全選
    int cnt=ui->listWidget->count();//項個數(shù)
    for (int i=0; i<cnt; i++)
    {
        QListWidgetItem *aItem=ui->listWidget->item(i);//獲取一個項
        aItem->setCheckState(Qt::Checked);//設置為選中
    }
}

void MainWindow::on_actSelNone_triggered()
{ //全不選
    int i,cnt;
    QListWidgetItem *aItem;

    cnt=ui->listWidget->count();//項個數(shù)
    for (i=0; i<cnt; i++)
    {
        aItem=ui->listWidget->item(i);//獲取一個項
        aItem->setCheckState(Qt::Unchecked);//不選
    }
}

void MainWindow::on_actSelInvs_triggered()
{//反選
    int i,cnt;
    QListWidgetItem *aItem;

    cnt=ui->listWidget->count();//項個數(shù)
    for (i=0; i<cnt; i++)
    {
        aItem=ui->listWidget->item(i);//獲取一個項
        if (aItem->checkState()!=Qt::Checked)
            aItem->setCheckState(Qt::Checked);
        else
            aItem->setCheckState(Qt::Unchecked);
    }

}

到了這里,關于04-6_Qt 5.9 C++開發(fā)指南_QListWidget和QToolButton的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

  • 16-1_Qt 5.9 C++開發(fā)指南_多語言界面

    16-1_Qt 5.9 C++開發(fā)指南_多語言界面

    有些軟件需要開發(fā)多語言界面版本,如中文版和英文版,并且在軟件里可以方便地切換界面語言。Qt 為多語言界面提供了很好的支持,使用 Qt 的一些規(guī)則和工具,可以很方便地為應用程序開發(fā)提供多語言界面支持。 用 Qt 開發(fā)多語言界面應用程序,主要包括以下幾個步驟。

    2024年02月14日
    瀏覽(23)
  • 07-3_Qt 5.9 C++開發(fā)指南_文件目錄操作

    07-3_Qt 5.9 C++開發(fā)指南_文件目錄操作

    Qt 為文件和目錄操作提供了一些類,利用這些類可以方便地實現(xiàn)一些操作。Qt 提供的與文件和目錄操作相關的類包括以下幾個。 QCoreApplication:用于提取應用程序路徑、程序名等文件信息 QFile: 除了打開文件操作外,QFile 還有復制文件、刪除文件等功能 QFileInfo:用于提取文件的信

    2024年02月13日
    瀏覽(49)
  • 09-1_Qt 5.9 C++開發(fā)指南_Qchart概述

    09-1_Qt 5.9 C++開發(fā)指南_Qchart概述

    Qt Charts 可以很方便地繪制常見的折線圖、柱狀圖、餅圖等圖表,不用自己耗費時間和精力開發(fā)繪圖組件或使用第三方組件了。 本章首先介紹 Qt Charts 的基本特點和功能,以畫折線圖為例詳細說明 Qt Charts 各主要部件的操作方法,再介紹各種常用圖表的繪圖方法,最后介紹鼠標

    2024年02月13日
    瀏覽(68)
  • 16-4_Qt 5.9 C++開發(fā)指南_Qt 應用程序的發(fā)布

    用 Qt 開發(fā)一個應用程序后,將應用程序提供給用戶在其他計算機上使用就是應用程序的發(fā)布。應用程序發(fā)布一般會提供一個安裝程序,將應用程序的可執(zhí)行文件及需要的運行庫安裝到用戶計算機上,即使用戶計算機上沒有安裝 Qt 也能正常運行安裝的程序。 Qt的應用程序發(fā)布

    2024年02月14日
    瀏覽(95)
  • 15-1_Qt 5.9 C++開發(fā)指南_Qt多媒體模塊概述

    15-1_Qt 5.9 C++開發(fā)指南_Qt多媒體模塊概述

    多媒體功能指的主要是計算機的音頻和視頻的輸入、輸出、顯示和播放等功能,Qt 的多媒體模塊為音頻和視頻播放、錄音、攝像頭拍照和錄像等提供支持,甚至還提供數(shù)字收音機的支持。本章將介紹 Qt 多媒體模塊的功能和使用。 Qt 多媒體模塊提供了很多類,可以實現(xiàn)如下的

    2024年02月13日
    瀏覽(39)
  • 12-4_Qt 5.9 C++開發(fā)指南_創(chuàng)建和使用共享庫

    12-4_Qt 5.9 C++開發(fā)指南_創(chuàng)建和使用共享庫

    除了靜態(tài)庫,Qt 還可以創(chuàng)建共享庫, 也就是 Windows 平臺上的動態(tài)鏈接庫 。動態(tài)鏈接庫項目編譯后生成 DLL 文件,DLL 文件在 windows 平臺上應用廣泛。DLL 文件是在應用程序運行時加載的,不像靜態(tài)庫那樣在編譯期間就連編到應用程序里。若更新了 DLL 文件版本,只要接口未變,

    2024年02月14日
    瀏覽(31)
  • 08-3_Qt 5.9 C++開發(fā)指南_Graphics View繪圖架構

    08-3_Qt 5.9 C++開發(fā)指南_Graphics View繪圖架構

    采用QPainter 繪圖時需要在繪圖設備的 paintEvent()事件里編寫繪圖的程序,實現(xiàn)整個繪圖過程。這種方法如同使用 Windows 的畫圖軟件在繪圖,繪制的圖形是位圖,這種方法適合于繪制復雜性不高的固定圖形,不能實現(xiàn)圖件的選擇、編輯、拖放、修改等功能。 Qt 為繪制復雜的可交

    2024年02月13日
    瀏覽(28)
  • 06-2_Qt 5.9 C++開發(fā)指南_自定義對話框及其調(diào)用

    06-2_Qt 5.9 C++開發(fā)指南_自定義對話框及其調(diào)用

    本篇介紹到的對話框及其調(diào)用實例較為復雜但十分詳細,如果做了解可以先參考:QT從入門到實戰(zhàn)x篇_13_模態(tài)和非模態(tài)對話框創(chuàng)建。 在一個應用程序設計中,為了實現(xiàn)一些特定的功能,必須設計自定義對話框。自定義對話框的設計一般從QDialog 繼承,并且可以采用 UI 設計器可

    2024年02月13日
    瀏覽(36)
  • 14-5_Qt 5.9 C++開發(fā)指南_基于HTTP 協(xié)議的網(wǎng)絡應用程序

    14-5_Qt 5.9 C++開發(fā)指南_基于HTTP 協(xié)議的網(wǎng)絡應用程序

    Qt 網(wǎng)絡模塊提供一些類實現(xiàn) OSI 7 層網(wǎng)絡模型中高層的網(wǎng)絡協(xié)議,如 HTTP、FTP、SNMP等,這些類主要是 QNetworkRequest、QNetworkReply和QNetworkAccessManager。 QNetworkRequest 類通過一個URL 地址發(fā)起網(wǎng)絡協(xié)議請求,也保存網(wǎng)絡請求的信息,目前支持 HTTP、FTP 和局部文件 URLs的下載或上傳。 QNe

    2024年02月13日
    瀏覽(28)
  • 07-2_Qt 5.9 C++開發(fā)指南_二進制文件讀寫(stm和dat格式)

    07-2_Qt 5.9 C++開發(fā)指南_二進制文件讀寫(stm和dat格式)

    除了文本文件之外,其他需要按照一定的格式定義讀寫的文件都稱為二進制文件 。每種格式的二進制文件都有自己的格式定義,寫入數(shù)據(jù)時按照一定的順序?qū)懭?,讀出時也按照相應的順序讀出。例如地球物理中常用的 SEG-Y 格式文件,必須按照其標準格式要求寫入數(shù)據(jù)才符合

    2024年02月13日
    瀏覽(22)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包