QT QTreeWidget与QDockWidget的使用

主要实现悬浮窗口的左右移动,QTreeWidget子项信号的使用 ,以及菜单栏与状态栏的使用。

一、效果图展示

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

二、主要代码

mainwindow.h

public:

    int m_time;

    QLabel* m_label;
    QMenuBar *m_pbar;
    QMenu *m_menu;
    QToolBar* m_toolbar;
    QStatusBar* m_statuBar;
    QTreeWidget* m_treeWidget;

public:
    void createMeenu();
    void init();
    void setTreeWidget();
    void createTree();
    void upDateTime();

    void createStatuBar();
    void addChildTree(QTreeWidgetItem* parentItem,int num);

    void timerEvent(QTimerEvent *);
public slots:
    void setClorSlot(QTreeWidgetItem* parentItem, int num);

mainwindow.cpp

void MainWindow::init()
{
    //设置为左右悬浮
    ui->m_dockWidget->setAllowedAreas(Qt::LeftDockWidgetArea | Qt::RightDockWidgetArea);
    ui->m_dockWidget->setStyleSheet("QDockWidget > QWidget {\nborder: 10px solid rgb(245,245,245);\n};");

    //设置标题
    ui->m_dockWidget->setWindowTitle("Dock Widet");

    //设置窗口不可关闭
    ui->m_dockWidget->setFeatures(QDockWidget::DockWidgetMovable|QDockWidget::DockWidgetFloatable);

    /*去掉标题栏,悬浮窗不能移动*/
//    QWidget *_titleWidget = new QWidget(this);
//    ui->m_dockWidget->setTitleBarWidget(_titleWidget);

    createMeenu();
    createTree();
    createStatuBar();
    connect(m_treeWidget, SIGNAL(itemDoubleClicked(QTreeWidgetItem *, int )),
            this, SLOT(setClorSlot(QTreeWidgetItem* , int )));
    
}

void MainWindow::createMeenu()
{
    m_pbar = new QMenuBar(this);
    m_pbar->setStyleSheet(" QMenuBar {\
                           background-color: qlineargradient(x1:0, y1:0, x2:0, y2:1,\
                           stop:0 lightgray, stop:1 rgb(245,245,245));\
                       }");

    this->setMenuBar(m_pbar);
    m_menu = new QMenu(QString::fromLocal8Bit("文件"));
    m_pbar->addMenu(m_menu);
}

void MainWindow::setTreeWidget()
{
    //设置表头
    m_treeWidget->setHeaderLabel(QString::fromLocal8Bit("章节"));

    //设置表头居中
    m_treeWidget->headerItem()->setTextAlignment(0, Qt::AlignHCenter);
    m_treeWidget->setStyleSheet("QHeaderView::section{background:rgb(245,245,245);}");

    QTreeWidgetItem* parentItem;

    //一级节点
    for (int i = 0; i < 3; i++)
    {
        parentItem = new QTreeWidgetItem(m_treeWidget);
        switch (i)
        {
            case 0:
            parentItem->setText(0, QString::fromLocal8Bit("一章节"));
            break;
            case 1:
            parentItem->setText(0, QString::fromLocal8Bit("二章节"));
            break;
            case 2:
            parentItem->setText(0, QString::fromLocal8Bit("三章节"));
            break;
            default:
            break;
        }
        addChildTree(parentItem,i);      
    }  
}

void MainWindow::addChildTree(QTreeWidgetItem* parentItem, int num)
{
    QString text;
    text = QString::number(num + 1, 10) + ".1";

    QTreeWidgetItem* childTree =  new QTreeWidgetItem(parentItem);
    childTree->setText(0, text);
    m_treeWidget->setCurrentItem(parentItem);
}

void MainWindow::timerEvent(QTimerEvent *e)
{
    qint32 timerId = e->timerId();
    if (timerId == m_time)
    {
        QTime tmCur = QTime::currentTime();
        QString str = tmCur.toString("hh:mm:ss.zzz");
        m_label->setText(str);
    }
}

void MainWindow::createTree()
{
    m_treeWidget = new QTreeWidget(ui->m_dockWidget);

    //设置显示控件为QTreeWidget
    ui->m_dockWidget->setWidget(m_treeWidget);

    setTreeWidget();
}

void MainWindow::upDateTime()
{
    char str[128];

    time_t t;
    time(&t);

    tm * ltm = localtime(&t);
   
    sprintf(str, "%02d:%02d:%02d", ltm->tm_hour, ltm->tm_min, ltm->tm_sec);

    //状态栏显示时间
    m_label->setText(QString::fromLocal8Bit(str));
  
}

void MainWindow::createStatuBar()
{
    m_statuBar = new QStatusBar(this);
    m_statuBar->setStyleSheet(" QStatusBar {background-color:rgb(220,220,220));}");
    setStatusBar(m_statuBar);

    m_label = new QLabel(statusBar());
    m_label->setFrameStyle(QFrame::Panel | QFrame::Sunken);
    m_label->setAlignment(Qt::AlignCenter);
    m_label->setFixedWidth(120);
    m_time = startTimer(100);

    upDateTime();
}

void MainWindow::setClorSlot(QTreeWidgetItem* parentItem, int num)
{
    if (NULL == parentItem->parent())
    {
        return;
    }
  
    if (QString::fromLocal8Bit("一章节") == parentItem->parent()->text(0))
    {
        ui->m_textEdit->setStyleSheet("background-color: rgb(85, 255, 0);}");
    }
    else if (QString::fromLocal8Bit("二章节") == parentItem->parent()->text(0))
    {
        ui->m_textEdit->setStyleSheet("background-color: rgb(245, 245, 245);}");
    }
    else
    {
        ui->m_textEdit->setStyleSheet("background-color: rgb(0, 0, 255);}");
    }
}

记录学习,后期还会继续完善功能

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Liu Zz

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值